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

所以我是一个初学者,我发现了很多关于如何找到第一个序列帽匹配标准的帖子,但我不知道如何将它与“分组依据”功能结合起来并显示它的新列。


我需要按“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]

})


有只小跳蛙
浏览 141回答 1
1回答

不负相思意

以下代码按照您的描述解决了您的问题。import pandas as pdimport numpy as npdf_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 Nonedf_input_grouped = df_input.groupby("Group")df_input_grouped = df_input_grouped.agg([greater_than])df_input["First sequence"] = Nonefor group, value in zip(df_input_grouped.index, df_input_grouped.Value.greater_than):    df_input["First sequence"][df_input.Group==group] = valuedf_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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python