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

Pandas行转列:将Fund转为列并按TradeGroup分组

问题:DataFrame 行列转换(TradeGroup分组,Fund转为列)

原始DataFrame格式

DateFundTradeGroupLongShortAlphaDetails
2018-05-22ATGG-ALong3.99Misc
2018-05-22ATGG-BLong4.99Misc
2018-05-22BTGG-ALong5.99Misc
2018-05-22BTGG-BShort6.99Misc
2018-05-22CTGG-ALong1.99Misc
2018-05-22CTGG-BLong5.29Misc

需求说明

需要将TradeGroup作为分组依据,把Fund转为列名,丢弃LongShort和Details列,最终得到如下格式的DataFrame:

TradeGroupDateABC
TGG-A2018-05-223.995.991.99
TGG-B2018-05-224.996.995.29

解决方案

你之前用df.pivot()没得到想要的结果,大概率是参数设置没到位。咱们用pivot或者pivot_table都能轻松实现,步骤如下:

  1. 先清理数据:删掉不需要的LongShort和Details列,只保留核心字段;
  2. 执行行列转换:指定正确的索引、列和值参数;
  3. 调整结构:把索引转回普通列,去掉多余的列层级名称。

代码实现(两种方法可选)

方法1:使用pivot(适合无重复组合的数据)
import pandas as pd

# 假设你的原始DataFrame是df
# 第一步:删除无关列
df_clean = df.drop(['LongShort', 'Details'], axis=1)

# 第二步:执行pivot转换,把TradeGroup和Date作为联合索引,Fund作为列,Alpha作为值
result_df = df_clean.pivot(
    index=['TradeGroup', 'Date'],
    columns='Fund',
    values='Alpha'
).reset_index()

# 第三步:去掉列名的层级标签,让格式更贴合需求
result_df.columns.name = None

# 查看最终结果
print(result_df)
方法2:使用pivot_table(适合有重复组合的数据,容错性更强)

如果你的数据中存在同一TradeGroup+Date+Fund的重复记录,可以用这个方法,指定聚合函数(比如取第一个值):

result_df = df_clean.pivot_table(
    index=['TradeGroup', 'Date'],
    columns='Fund',
    values='Alpha',
    aggfunc='first'  # 如果有重复值,可换成'mean'/'sum'等
).reset_index()

result_df.columns.name = None

运行后就能得到你想要的目标格式啦~


内容的提问来源于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:35:23