我想根据 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
