You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

运行结果

你会得到和预期完全一致的输出:

TradeGroupFund NameContributionFromTo
AFund_10.252013-01-012013-01-04
BFund_10.552013-01-012013-01-04

逻辑说明

  • agg()方法接收一个字典,键是列名,值是对应的聚合函数:
    • 对于Fund Name,因为同一TradeGroup下的基金名称都是一样的,用first/last/max都能拿到正确值;
    • Contribution用sum实现分组求和;
    • From取min(最早的日期),To取max(最晚的日期),正好符合你想要的时间范围合并需求;
  • 最后用reset_index()把TradeGroup从索引变回普通列,结构就和原DataFrame一致了。

内容的提问来源于stack exchange,提问作者CodeSsscala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:02:48