Skip to main content
 首页 » 编程设计

python之对数据框中特定列的重复行求和

2025年05月04日16youxin

我想根据 B 列的重复行添加特定列(C、D、E、F、G)。而其余非重复行保持不变。 A 列的输出必须是重复行的第一个索引。

我有一个数据框如下:

A     B     C  D  E  F  G 
box1  0487  1     1     1 
box2  0487     1     1 
blue  0478  1  1        1 
gray  0478  1  1  1  1 
gray  0478        1  1  1 
flat  8704  1  1        1 
clay  8704        1     1 
dark  8740  1  1  1  1  1 
late  4087  1     1     1 

我想要的输出如下:

A     B     C   D  E  F  G 
box1  0487  1   1  1  1  1 
blue  0478  2   2  2  2  2 
flat  8704  1   1  1     2 
dark  8740  1   1  1  1  1 
late  4087  1      1     1 

我很高兴听到一些建议。

请您参考如下方法:

使用聚合函数创建列名字典并传递给 agg , 这里也需要 min_count=1 到 sum 以避免 0 和 NaN 的值:

L = ['C','D','E','F','G'] 
d = {**dict.fromkeys(L, lambda x: x.sum(min_count=1)), **{'A':'first'}} 
df = df.groupby('B', as_index=False, sort=False).agg(d).reindex(columns=df.columns) 
print (df) 
      A     B    C    D    E    F    G 
0  box1  0487  1.0  1.0  1.0  1.0  1.0 
1  blue  0478  2.0  2.0  2.0  2.0  2.0 
2  flat  8704  1.0  1.0  1.0  NaN  2.0 
3  dark  8740  1.0  1.0  1.0  1.0  1.0 
4  late  4087  1.0  NaN  1.0  NaN  1.0 

d = {**dict.fromkeys(L, 'sum'), **{'A':'first'}} 
df = df.groupby('B', as_index=False, sort=False).agg(d).reindex(columns=df.columns) 
print (df) 
      A     B    C    D    E    F    G 
0  box1  0487  1.0  1.0  1.0  1.0  1.0 
1  blue  0478  2.0  2.0  2.0  2.0  2.0 
2  flat  8704  1.0  1.0  1.0  0.0  2.0 
3  dark  8740  1.0  1.0  1.0  1.0  1.0 
4  late  4087  1.0  0.0  1.0  0.0  1.0