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

基于groupby计算后生成目标DataFrame的技术实现问询

问题与解决方案

问题描述

现有如下结构的Pandas DataFrame:

ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00

已按Start、Asset、Deal字段分组并计算,得到多个独立DataFrame组成的列表:

# 分组1:Sell-HO-01/01/2024
ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     7500.00   

# 分组2:Buy-HO-01/01/2024
ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Buy    HO     01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

# 分组3:Sell-WTI-01/01/2024
ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
1   04/11/2024   party1   Sell   WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   3000     5000.00   

# 分组4:Buy-WTI-01/01/2024
ID  TradeDate    party    Deal   Asset  Start       Expire      Fixed   Quantity  MTM      Float
1   04/11/2024   party1   Buy    WTI    01/01/2024  02/01/2024  10.00   1000     2500.00   10.00
total                                                                   1000     2500.00   

需要转换为如下目标格式的DataFrame:

party   Deal  Asset Start        MTM       Float
party1  Sell  HO    01/01/2024   7500.00   10.00 
party1  Buy   HO    01/01/2024   5000.00   10.00
party1  Sell  WTI   01/01/2024   5000.00   10.00
party1  Buy   WTI   01/01/2024   2500.00   10.00

解决方案

不需要再次执行groupby操作,有两种高效实现路径:

路径一:直接从原始DataFrame生成结果(推荐)

原始数据已包含所有必要维度,直接按目标字段分组聚合即可,跳过中间分组步骤,效率更高:

import pandas as pd

# 假设原始数据存储在df中
result = df.groupby(['party', 'Deal', 'Asset', 'Start']).agg(
    MTM=('MTM', 'sum'),          # 对MTM求和
    Float=('Float', 'first')     # 同组内Float值一致,取第一个即可
).reset_index()

print(result)

路径二:基于已有的分组DataFrame列表处理

如果必须使用已生成的分组列表,只需提取每个分组的关键信息即可:

# 假设分组后的DataFrame列表为group_dfs(可通过[g for _, g in groups]获取)
output_rows = []

for group_df in group_dfs:
    # 提取分组的基础属性(同组内值一致,取第一行)
    base_info = group_df[['party', 'Deal', 'Asset', 'Start', 'Float']].iloc[0]
    # 提取total行的MTM值
    total_mtm = group_df['MTM'].iloc[-1]
    
    # 组装成目标行
    output_rows.append({
        **base_info.to_dict(),
        'MTM': total_mtm
    })

result = pd.DataFrame(output_rows)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:54:53