为了账号安全,请及时绑定邮箱和手机立即绑定

Python group by 和 find 找到符合条件的第一个序列

Python group by 和 find 找到符合条件的第一个序列

有只小跳蛙 2022-12-06 16:40:08
所以我是一个初学者,我发现了很多关于如何找到第一个序列帽匹配标准的帖子,但我不知道如何将它与“分组依据”功能结合起来并显示它的新列。我需要按“Group”列对数据进行分组,找到第一个 >0 的值,然后在该组的每一行的 now 列中重复显示它。输入:df_input = pd.DataFrame({    "Group": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C"],    "Value": [0, 1, 0, 3, 5, 0, 2, 4, 4, 0, 3, 0]})输出:df_output = pd.DataFrame({    "Group": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C"],    "Value": [0, 1, 0, 3, 5, 0, 2, 4, 4, 0, 3, 0],    "First sequence": [1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3]})
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

以下代码按照您的描述解决了您的问题。


import pandas as pd

import numpy as np


df_input = pd.DataFrame({

    "Group": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "C", "C", "C"],

    "Value": [0, 1, 0, 3, 5, 0, 2, 4, 4, 0, 3, 0]

})


def greater_than(array, lower_bound=1):

    condition_fulfiled = (array > lower_bound)

    is_greater = condition_fulfiled.any()


    if is_greater:

        return array[np.argmax(condition_fulfiled)]

    else:

        return None



df_input_grouped = df_input.groupby("Group")

df_input_grouped = df_input_grouped.agg([greater_than])



df_input["First sequence"] = None


for group, value in zip(df_input_grouped.index, df_input_grouped.Value.greater_than):

    df_input["First sequence"][df_input.Group==group] = value


df_input

如果你想从你的结果中得到结果,data frame你只需要将函数更改greater_than为


def greater_than(array, lower_bound=1):

    condition_fulfiled = (array >= lower_bound)

    is_greater = condition_fulfiled.any()


    if is_greater:

        return array[np.argmax(condition_fulfiled)]

    else:

        return None


查看完整回答
反对 回复 2022-12-06
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信