gpt4 book ai didi

python - 基于列名的 Pandas 中多列的不同聚合

转载 作者:行者123 更新时间:2023-12-04 09:26:27 25 4
gpt4 key购买 nike

我有一个大 Pandas 数据框,我想以不同的方式聚合列。我有 24 列(一天中的几个小时),我想总结一下,对于所有其他人,只取最大值。
我知道我可以手动编写所需的条件,如下所示:

df_agg = df.groupby('user_id').agg({'hour_0':'sum', 
'hour_1':'sum',
.
.
'hour_24':'sum',
'all other columns': 'max'}
)
但我想知道是否存在优雅的解决方案:
df_agg = df.groupby('user_id').agg({'hour_*':'sum', 
'all other columns != hour_*': 'max'}

最佳答案

您可以使用 hour 按所有列生成字典,将所有其他列添加到另一个字典,合并它们并最后传递给 agg :

c1 = df.columns[df.columns.str.startswith('hour')].tolist()
#also excluded user_id column for avoid `max` aggregation
c2 = df.columns.difference(c1 + ['user_id'])
#https://stackoverflow.com/a/26853961
d = {**dict.fromkeys(c1, 'sum'), **dict.fromkeys(c2, 'max')}

df_agg = df.groupby('user_id').agg(d)
或者您可以使用 2 次 groupby concat :
df_agg = pd.concat([df.groupby('user_id')[c1].sum(), 
df.groupby('user_id')[c2].max()], axis=1)

关于python - 基于列名的 Pandas 中多列的不同聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62991809/

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