gpt4 book ai didi

python - Pandas 分组 bp,根据条件过滤和提取行

转载 作者:行者123 更新时间:2023-12-04 13:28:15 24 4
gpt4 key购买 nike

d = {'ID': ['H1', 'H1', 'H2', 'H2', 'H3', 'H3'], 'Month': ['01/06/2020', '01/06/2020', '01/08/2020', '01/08/2020', '01/07/2020', '01/07/2020'], 'Check': ['H', 'S', 'H', 'S', 'H', 'S'], 'Unit': [10, 0, 10, 0, 10, 5]}
df_input = pd.DataFrame(data=d)
groupby输入数据帧 ( df_input ) 来自 IDMonth ,并提取等于 groupby 的行 Unit的总和.例如,我希望输出看起来像:
d = {'ID': ['H1', 'H2'], 'Month': ['01/06/2020', '01/08/2020'], 'Check': ['H', 'H'], 'Unit': [10, 10]}
df_output = pd.DataFrame(data=d)
我试过这个:
df_input.groupby(['ID', 'Month']).filter(lambda x: (x['Unit'] == sum(x['Unit'])).any())
但它没有按预期工作。

最佳答案

您可以使用 DataFrame.transform按 ID 和 Month 创建一系列总和,并按该系列过滤您的 df

filter_cond = df_input.groupby(['ID','Month'])['Unit'].transform('sum')
df_output = df_input[df_input['Unit'] == filter_cond].reset_index(drop = True)


ID Month Check Unit
0 H1 01/06/2020 H 10
1 H2 01/08/2020 H 10
这是另一种选择(只是为了解释如何使您的解决方案起作用)但它不会是最佳的,
df_input[df_input.groupby(['ID', 'Month']).apply(lambda x: (x['Unit'] == x['Unit'].sum())).reset_index(drop = True)]

关于python - Pandas 分组 bp,根据条件过滤和提取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66790494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com