gpt4 book ai didi

python - 如何根据复杂的列条件集聚合重复行

转载 作者:行者123 更新时间:2023-12-01 01:14:22 24 4
gpt4 key购买 nike

我正在使用 pandas 来探索包含多个重复条目的数据集。例如:

import pandas as pd
pd.DataFrame({'ID':['001','001','002','002','002','003','003','004','004'],
'a':['Yes','Yes','Yes','No','Yes','Yes','No','No','No'],
'b':['NaN',3,'NaN',5,4,7,'NaN','NaN','NaN']})

ID a b
001 Yes NaN
001 Yes 3
002 Yes NaN
002 No 5
002 Yes 4
003 Yes 7
003 No NaN
004 No NaN
004 No NaN

每个重复的 ID 应合并为一行,其中列的值根据以下规则聚合:

  • 如果列中存在, 应取代

  • 如果列中存在,则应用一个数字替换 NaN,如果存在多个数字,则应选择最大的数字。

预期结果是:

ID  a   b
001 Yes 3
002 Yes 5
003 Yes 7
004 No NaN

我尝试过(但失败了)创建一个自定义函数,然后使用 apply 和 lambda。但是,我认为这不是正确的方法,因为我看不到这些按行操作处理一组重复项的方法。

最佳答案

'NaN' 字符串替换为 np.nan 后,您可以使用 groupby + max。这是特别有效的,因为 'Yes' > 'No' 返回 True。为了提高效率,我建议您将系列 a 转换为分类系列或 bool 系列。

# replace 'NaN' strings with np.nan
df['b'] = df['b'].replace('NaN', np.nan)

# groupby + max, reset index to elevate index to column
res = df.groupby('ID').max().reset_index()

print(res)

ID a b
0 001 Yes 3.0
1 002 Yes 5.0
2 003 Yes 7.0
3 004 No NaN

关于python - 如何根据复杂的列条件集聚合重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503153/

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