我想基于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
我很高兴听到一些建议。
答案 0 :(得分:7)
使用聚合函数创建列名称的字典,并传递到agg
,在这里也有必要将min_count=1
到sum
以避免总和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