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

时间:2018-11-05 12:11:56

标签: python pandas dataframe

我想基于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

我很高兴听到一些建议。

1 个答案:

答案 0 :(得分:7)

使用聚合函数创建列名称的字典,并传递到agg,在这里也有必要将min_count=1sum以避免总和0的{​​{1}}值:

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