首页 > 解决方案 > 在熊猫数据框中将列转换为多行

问题描述

我有一个看起来像这样的数据框:

   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

标签: pythonpandasdataframe

解决方案


你可以使用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')

推荐阅读