我有以下数据帧,我想转置它,以便列"Trans_Type"中的元素成为表示列"Trans_Amount"中的值的新列.

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'])
df

Df输出:

    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.5

预期输出:

    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

任何帮助都是最好的. 谢谢 艾伦

推荐答案

您可以使用DataFrame.reset_index作为具有唯一值的帮助器列,因此可以使用DataFrame.pivot进行整形:

out = (df.reset_index()
         .pivot(index=['index','Date','Account_Number'],
                columns='Trans_Type', 
                values='Trns_Amount')
         .reset_index(level=[1,2]))
print (out)
Trans_Type        Date Account_Number       CR     DR
index                                                
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

Python相关问答推荐

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如何避免Chained when/then分配中的Mypy不兼容类型警告?

发生异常:TclMessage命令名称无效.!listbox"

如何在Python脚本中附加一个Google tab(已经打开)

如何在Raspberry Pi上检测USB并使用Python访问它?

关于Python异步编程的问题和使用await/await def关键字

在含噪声的3D点网格中识别4连通点模式

将JSON对象转换为Dataframe

字符串合并语法在哪里记录

用砂箱开发Web统计分析

使用Python和文件进行模糊输出

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

在Python中调用变量(特别是Tkinter)

找到相对于列表索引的当前最大值列表""

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

如果包含特定值,则筛选Groupby

根据Pandas中带条件的两个列的值创建新列

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

如何在Python中画一个只能在对角线内裁剪的圆?

将鼠标悬停在海运`pairplot`的批注/高亮显示上