Pandas分组求和时保留列的实现方法求助
解决Pandas分组求和并保留多列的问题
嘿,我来帮你搞定这个需求!你之前用df.groupby('TradeGroup')['Contribution'].sum()只拿到了求和后的Contribution,是因为这个写法只对单独一列做了聚合,其他列没被处理所以就丢失了。要同时保留Fund Name、From、To这些列,咱们得给每个列指定对应的聚合规则,用agg()方法就能实现。
具体步骤和代码示例
首先先构造你的测试数据(方便你直接运行验证):
import pandas as pd data = { 'TradeGroup': ['A', 'B', 'A', 'B'], 'Fund Name': ['Fund_1', 'Fund_1', 'Fund_1', 'Fund_1'], 'Contribution': [0.20, 0.10, 0.05, 0.45], 'From': ['2013-01-01', '2013-01-01', '2013-01-03', '2013-01-03'], 'To': ['2013-01-02', '2013-01-02', '2013-01-04', '2013-01-04'] } df = pd.DataFrame(data)
然后执行分组聚合操作:
result = df.groupby('TradeGroup').agg( **{ 'Fund Name': 'first', # 同一组内Fund Name相同,取第一个值即可 'Contribution': 'sum', # 对贡献额求和 'From': 'min', # 取最早的起始日期 'To': 'max' # 取最晚的结束日期 } ).reset_index() print(result)
运行结果
你会得到和预期完全一致的输出:
| TradeGroup | Fund Name | Contribution | From | To |
|---|---|---|---|---|
| A | Fund_1 | 0.25 | 2013-01-01 | 2013-01-04 |
| B | Fund_1 | 0.55 | 2013-01-01 | 2013-01-04 |
逻辑说明
agg()方法接收一个字典,键是列名,值是对应的聚合函数:- 对于
Fund Name,因为同一TradeGroup下的基金名称都是一样的,用first/last/max都能拿到正确值; Contribution用sum实现分组求和;From取min(最早的日期),To取max(最晚的日期),正好符合你想要的时间范围合并需求;
- 对于
- 最后用
reset_index()把TradeGroup从索引变回普通列,结构就和原DataFrame一致了。
内容的提问来源于stack exchange,提问作者CodeSsscala
相关产品推荐
相关产品推荐

