旋转数据帧时的列顺序

时间:2018-01-11 10:15:08

标签: python pandas dataframe pivot

我有一个像这样的数据框

data_dict = {'Date': [2010,2010,2010], 'Description': ['ZZ','XX','YY'], 'Value': [10,20,30], 'ID':[1,2,3]}
df = pd.DataFrame(data_dict)

   Date Description  ID  Value
0  2010          ZZ   1     10
1  2010          XX   2     20
2  2010          YY   3     30

我现在想像这样转动我的数据

df_piv = df.pivot(index='Date', columns='Description', values='Value')

给了我这个

Description  XX  YY  ZZ
Date                   
2010         20  30  10

我怎样才能使用字母列顺序,按照我的ID列命令获取

Description  ZZ  XX  YY
Date                   
2010         10  20  30

可能的解决方案:

 description = list(df['Description'])
 df_piv[description]

2 个答案:

答案 0 :(得分:1)

要做到这一点,你需要调用reindex(reindex_axis将被弃用)

In [15]: column_order = ['ZZ', 'XX', 'YY']

In [16]: df_piv.reindex(column_order, axis=1)
Out[16]: 
Description  ZZ  XX  YY
Date                   
2010         10  20  30

答案 1 :(得分:1)

考虑这个替代解决方案:

首先创建一个字典,将“ID”列映射到“描述”列

to_dict = df.loc[:,['ID','Description']].set_index('ID').to_dict().get('Description')

比使用您想要重新排列顺序的列创建数据透视表,而不是简单地重命名上面创建的字典中的列。

df.pivot(index='Date',columns='ID', values='Value').rename(columns=to_dict)

您可能希望使用此替代方法,其中要重新排列的列数非常大,并且通过pandas.reindex函数手动键入重新排列顺序将非常繁琐。

如果您希望可以添加此附加代码行

df.columns.name = df.columns.name.replace('ID','Decription')