python - 在熊猫数据框中将列转换为多行
问题描述
我有一个看起来像这样的数据框:
Deal Year Quarter_1 Quarter_2 Quarter_3 Financial_Data
h 1 1991 1 2 3 120
i 2 1992 4 5 6 80
j 3 1993 7 8 9 100
我想将所有季度合并到一个新列中并复制交易编号、年份和财务数据。最终结果应如下所示:
Deal Year Quarter Financial_Data
h 1 1991 1 120
i 1 1991 2 120
j 1 1991 3 120
k 2 1992 4 80
l 2 1992 5 80
m 2 1992 6 80
n 3 1993 7 100
o 3 1993 8 100
p 3 1993 9 100
解决方案
你可以使用melt
方法。
df = pd.melt(d, id_vars=["Deal", "Year", "Financial_Data"],
value_name="Quarter").drop(['variable'],axis=1).sort_values('Quarter')
输出
Deal Year Financial_Data Quarter
0 1 1991 120 1
3 1 1991 120 2
6 1 1991 120 3
1 2 1992 80 4
4 2 1992 80 5
7 2 1992 80 6
2 3 1993 100 7
5 3 1993 100 8
8 3 1993 100 9
如果你有很多列,你可以使用df.columns.tolist()
方法来达到你的要求。
column_list = df.columns.tolist()
id_vars_list = column_list[:2] + column_list[-1:]
声明将变为
df = pd.melt(d, id_vars=id_vars_list,
value_name="Quarter").drop(['variable'],axis=1).sort_values('Quarter')
推荐阅读
- javascript - 如何在 asp.net 中使用 XMLHttpRequest 从带有 Post 方法的页面获取响应文本?
- sql - mssql cdc update_mask 过滤器更改仅在列 TS
- uipath - 构建数据表错误(无法读取数据表)
- php - 邮件程序错误:邮件正文为空,需要在正文中没有更改的情况下发送邮件
- python - 这是解决 Spacekings 问题的正确方法吗?
- c# - 如何在 C# 中拯救 null?
- java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造实例
- git - 这个 git rebase 步骤两个 git 分支是否正确?
- javascript - 如何在使用lineseries制作的线条上方对齐uielement文本框
- selenium - selenium WebDriverWait.Untils NoSuchMethodError