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完成转置,步骤如下:
- 以原Dataframe的索引为唯一标识,将
Trans_Type转为列,Trns_Amount作为对应列的值 - 将转换结果与原数据的核心列(日期、账号)合并
- 可选:对金额列保留两位小数
# 生成转置后的交易类型列 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
相关产品推荐
相关产品推荐

