我有一个很大的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'}发布于 2020-07-20 16:54:11
您可以使用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)或者,您可以在concat中使用2倍的groupby
df_agg = pd.concat([df.groupby('user_id')[c1].sum(),
df.groupby('user_id')[c2].max()], axis=1)https://stackoverflow.com/questions/62991809
复制相似问题