我的 df 看起来像这样(非常简化):
本质上我遇到的问题是我想合并具有重复名称的行(即同一个人)。年龄将保持不变,A 列和 B 列需要相加,但 CI 列必须平均这两个值。
我努力了:
df.agg({'A' : ['sum'], 'B' : ['sum'], 'C': ['mean']}),但这只是使用这些列值创建一个新的 df。
df.agg({'A' : ['sum'], 'B' : ['sum'], 'C': ['mean']})
我对熊猫非常缺乏经验,所以我只尝试了有限的东西。
我希望结果是这样的:
实际上,我还有更多的专栏(超过 100 个)。我已经创建了需要添加、平均然后保持不变的列名列表。
我的主要想法是做一些事情,例如:
do_nothing = [] #lists contain column names already add_cols = [] avg_cols = [] for i in df.columns: if i in do_nothing: #dont do anything if i in add_cols: #add cols if i in avg_cols: #get mean
如果我只需要一个操作,例如 ‘sum’,我知道我可以这样做: print(df.groupby(["Name", "Age"], as_index=False).sum()),但我不确定如何使用上述列列表进行多项操作。
print(df.groupby(["Name", "Age"], as_index=False).sum())
您应该按名称对数据进行分组,然后为不同的列添加聚合:
(df.groupby('Name', as_index=False, sort=False) .agg({'Age': 'first', 'A': sum, 'B': sum, 'C': 'mean'}) )
输出:
Name Age A B C 0 John 27 16 36 10.0 1 David 23 24 58 11.0