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

Python中Dataframe重塑转置:将Trans_Type转为列展示交易金额

解决方案:将Dataframe按交易类型转置生成新列

需求说明

需要将包含日期、账号、交易类型(Trans_Type)和交易金额(Trns_Amount)的Dataframe进行转置,使交易类型(CR/DR)成为单独的列,对应行的交易金额填入对应列,其余位置填充NaN。

原数据与输出

原Dataframe代码:

import pandas as pd
import numpy as np

df = pd.DataFrame([['21/10/2023','1','CR',2323],
                    ['21/10/2023','1','CR',23],
                    ['21/10/2023','1','DR',65],
                    ['21/10/2023','2','CR',3.3],
                    ['21/10/2023','3','CR',56],      
                    ['21/10/2023','3','DR',23.66],
                    ['21/10/2023','4','CR',54.34],
                    ['22/10/2023','4','CR',23.34],
                    ['22/10/2023','4','DR',5.5]],
columns = ['Date','Account_Number','Trans_Type','Trns_Amount'])

原输出:

Date        Account_Number  Trans_Type  Trns_Amount
0   21/10/2023  1               CR          2323.00
1   21/10/2023  1               CR          23.00
2   21/10/2023  1               DR          65.00
3   21/10/2023  2               CR          3.30
4   21/10/2023  3               CR          56.00
5   21/10/2023  3               DR          23.66
6   21/10/2023  4               CR          54.34
7   22/10/2023  4               CR          23.34
8   22/10/2023  4               DR          5.50

期望输出:

Date        Account_Number    CR      DR
0   21/10/2023  1                 2323.00 NaN
1   21/10/2023  1                 23.00   NaN
2   21/10/2023  1                 NaN     65.00
3   21/10/2023  2                 3.30    NaN
4   21/10/2023  3                 56.00   NaN
5   21/10/2023  3                 NaN     23.66
6   21/10/2023  4                 54.34   NaN
7   22/10/2023  4                 23.34   NaN
8   22/10/2023  4                 NaN     5.50

代码实现

利用pandas的pivot方法结合join完成转置,步骤如下:

  1. 以原Dataframe的索引为唯一标识,将Trans_Type转为列,Trns_Amount作为对应列的值
  2. 将转换结果与原数据的核心列(日期、账号)合并
  3. 可选:对金额列保留两位小数
# 生成转置后的交易类型列
transposed_cols = df.pivot(index=df.index, columns='Trans_Type', values='Trns_Amount')
# 合并核心列与转置结果
result = df[['Date', 'Account_Number']].join(transposed_cols)
# 可选:保留两位小数
result[['CR', 'DR']] = result[['CR', 'DR']].round(2)

# 查看最终结果
print(result)

也可以简化为一行代码:

result = df[['Date', 'Account_Number']].join(df.pivot(index=df.index, columns='Trans_Type', values='Trns_Amount')).round(2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:30:31