Pandas DataFrame如何按指定列条件对重复子集行求和
pandas按条件对指定分组的重复行求和
我们通常对列子集对应的重复行求和的写法如下:
import pandas as pd df = pd.DataFrame({"source": [1, 1, 3, 1, 1], "target":[2, 2, 5, 3, 3], "value": [0.5, 1.0, 1.51, 0.2, 0.5]}) print("原始数据:") print(df) print("全部分组求和结果:") print(df.groupby(['source','target'], as_index=False)["value"].sum())
运行输出:
原始数据: source target value 0 1 2 0.50 1 1 2 1.00 2 3 5 1.51 3 1 3 0.20 4 1 3 0.50 全部分组求和结果: source target value 0 1 2 1.50 1 1 3 0.70 2 3 5 1.51
如果要给求和添加条件,比如仅对target为2的重复行执行求和,其他行保留原始值,可以用拆分拼接的思路实现,代码如下:
# 拆分数据:target=2的部分分组求和,其余部分保留原始值 df_target2 = df[df['target'] == 2].groupby(['source','target'], as_index=False)['value'].sum() df_other = df[df['target'] != 2] # 拼接两部分数据,重置索引 res = pd.concat([df_target2, df_other], ignore_index=True) print(res)
运行输出完全符合预期:
source target value 0 1 2 1.50 1 3 5 1.51 2 1 3 0.20 3 1 3 0.50
补充:如果后续需要删除其他分组的重复行,直接执行df.drop_duplicates(subset=["source","target"])即可。
内容的提问来源于stack exchange,提问作者Abolfazl
相关产品推荐
相关产品推荐

