python - 如何在熊猫中转置多列
问题描述
我有一个包含以下列标题和行示例的表:
df_test = pd.DataFrame([(20211014,2539683,108783,'NPL',-20000,'(-) ลดตามยอดผ่อน',-20000,'(-) NPL Exit',-2000,'(-) NPL Exit', 1),
(20211014,2539683,108783,'NPL',0,'',0,'',0,'', 0)],
columns=['DATA_DATE', 'ID', 'Response','TYPE', 'M1', 'R1', 'M2', 'R2', 'M3', 'R3','PERCENT'])
原始数据框:
DATA_DATE ID Response TYPE M1 R1 M2 R2 M3 R3 PERCENT
0 20211014 2539683 108783 NPL -20000 (-) ลดตามยอดผ่อน -20000 (-) NPL Exit -2000 (-) NPL Exit 1
1 20211014 2539683 108783 NPL 0 0 0 0
目标数据框:
DATA_DATE ID Response TYPE PERCENT Reason M1 M2 M3
0 20211014 2539683 108783 NPL 1 (-) ลดตามยอดผ่อน -2000 0 0
1 20211014 2539683 108783 NPL 1 (-) NPL Exit 0 -2000 0
2 20211014 2539683 108783 NPL 1 (-) NPL Exit 0 0 -2000
对此方法的建议非常感谢。
解决方案
你可以做(df
你的数据框):
df1 = pd.concat(
[
df.iloc[0, 5:-1:2].T.reset_index(drop=True).rename("Reason"),
df.iloc[0, 4:-1:2].T
.reset_index()
.rename(columns={"index": "columns", 0: "values"})
.pivot(columns="columns", values="values")
.fillna(0)
],
axis=1
)
df2 = (
df.iloc[:1, list(range(4)) + [df.shape[1] - 1]]
.loc[[0] * df1.shape[0], :]
.reset_index(drop=True)
)
result = pd.concat([df2, df1], axis=1)
结果:
DATA_DATE ID Response TYPE ... Reason M1 M2 M3
0 20211014 2539683 108783 NPL ... (-) ลดตามยอดผ่อน -20000 0 0
1 20211014 2539683 108783 NPL ... (-) NPL Exit 0 -20000 0
2 20211014 2539683 108783 NPL ... (-) NPL Exit 0 0 -2000
[3 rows x 9 columns]
推荐阅读
- javascript - 我可以在不添加任何对象变量的情况下向变量添加 setter 和 getter
- asp.net-web-api - Web API JSON 反序列化转换值问题
- python - 从大量数据库中获取信息的正确方法
- javascript - 获取vue中动态类的“活动”类名
- github - 使用 git repo 中的新内容更新本地文件夹
- python - 作为设置要求的一部分安装预构建轮文件
- javascript - 导入后反应奇怪的代码注入会给出错误消息
- python - 如何在标签内包含标签外的文本。Python
- r - 条件检查 - 稀疏数据
- mysql - 如何在单个语句中运行 set 和 select 查询