小编典典

将重复的行添加在一起,不同的列有不同的条件?

all

我的 df 看起来像这样(非常简化):

姓名 年龄 一个 C
约翰 27 12 17 13
大卫 23 14 50 10
约翰 27 4 19 7
大卫 23 10 8 12

本质上我遇到的问题是我想合并具有重复名称的行(即同一个人)。年龄将保持不变,A 列和 B 列需要相加,但 CI 列必须平均这两个值。

我努力了:

df.agg({'A' : ['sum'], 'B' : ['sum'], 'C': ['mean']}),但这只是使用这些列值创建一个新的 df。

我对熊猫非常缺乏经验,所以我只尝试了有限的东西。

我希望结果是这样的:

姓名 年龄 一个 C
约翰 27 16 36 10
大卫 23 24 58 11

实际上,我还有更多的专栏(超过 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()),但我不确定如何使用上述列列表进行多项操作。


阅读 58

收藏
2022-06-25

共1个答案

小编典典

您应该按名称对数据进行分组,然后为不同的列添加聚合:

(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
2022-06-25