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

基于Pandas实现DataFrame按org_id的宽表转换及金额列提取

Pandas DataFrame 转宽表问题

我有一个名为data的Pandas DataFrame,结构如下:

org_idcommit_datecommit_amt
1232020-06-0150000
1232020-06-0150000
1232021-06-0160000
2342019-07-0130000
2342020-07-0140000
2342021-07-0150000

希望将其转换为如下格式的宽表:

org_iddate_1date_2date_3amt_1amt_2amt_3
1232020-06-012021-06-012022-06-01500005000060000
2342019-07-012020-07-012021-07-01300004000050000

已实现的代码(日期列提取)

通过以下代码成功获取了org_id列和日期列:

dates = data.groupby('org_id').apply(lambda x: x['commit_date'].unique()) # 获取每个org_id对应的唯一commit_date
dates = dates.apply(pd.Series) # 将每个唯一日期放到单独列,日期不足的org_id对应位置为NaN
c_dates = pd.DataFrame() # 创建空DataFrame
c_dates['org_id'] = dates.index # 指定org_id列
c_dates['date_1'] = dates[0].values.tolist()
c_dates['date_2'] = dates[1].values.tolist()
c_dates['date_3'] = dates[2].values.tolist()

遇到的问题

上述代码无法正确提取amt_1、amt_2、amt_3列:

  • 复用日期列的代码会丢失org_id=123对应的重复金额50000
  • c_dates与原data长度不匹配,无法直接关联

尝试的其他代码

尝试了以下代码取得部分进展,但格式不符合要求:

dates = data.groupby(['org_id','commit_amt']).apply(lambda x: x['commit_date'].unique()) # 获取每个(org_id, commit_amt)对应的唯一commit_date
dates = dates.apply(pd.Series) # 将每个唯一日期放到单独列,日期不足的对应位置为NaN

生成的表格如下:

org_idcommit_amt
123500002020-06-012021-06-01
123600002022-06-01
234300002019-07-01
234400002020-07-01
234500002021-07-01

最终需求

希望将数据调整为目标格式,以便计算amt_1与amt_2等的差值。

后续更新

已解决问题,所需函数为unstack,后续将补充完整方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:55:17