如何将Pandas DataFrame分组求和结果保存至新列?
解决方案
原始DataFrame:
| key1 | key2 | key3 | value1 | value2 |
|---|---|---|---|---|
| 1 | a | s2 | 3 | 4 |
| 1 | a | s2 | 2 | 3 |
| 2 | b | j6 | 1 | 1 |
期望结果:
| key1 | key2 | key3 | value1 | value2 | sum_value1 | sum_value2 |
|---|---|---|---|---|---|---|
| 1 | a | s2 | 3 | 4 | 5 | 7 |
| 1 | a | s2 | 2 | 3 | 5 | 7 |
| 2 | b | j6 | 1 | 1 | 1 | 1 |
你已经找对了核心思路,只需要扩展到value2即可,这里提供两种实现方式:
方式一:逐列处理
直接复用你的逻辑,对value2执行同样的分组求和转换:
import pandas as pd # 假设df是你的原始DataFrame df["sum_value1"] = df["value1"].groupby([df["key1"], df["key2"], df["key3"]]).transform('sum') df["sum_value2"] = df["value2"].groupby([df["key1"], df["key2"], df["key3"]]).transform('sum')
方式二:批量处理(更高效)
如果需要处理多列,这种方式可以减少重复分组操作,效率更高:
import pandas as pd # 按分组键对value1、value2执行求和转换 sum_values = df.groupby(["key1", "key2", "key3"])[["value1", "value2"]].transform('sum') # 重命名列名以匹配需求 sum_values.columns = ["sum_value1", "sum_value2"] # 将结果合并回原DataFrame df = pd.concat([df, sum_values], axis=1)
两种方式都能生成你需要的结果,批量处理更适合后续扩展多列的场景。
内容的提问来源于stack exchange,提问作者di1a
相关产品推荐
相关产品推荐

