Python 数据帧数据透视时的列顺序

Python 数据帧数据透视时的列顺序,python,pandas,dataframe,pivot,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

我有一个这样的数据帧

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')
我现在想像这样调整我的数据

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]

为此,您需要调用
reindex
(reindex\u axis将被弃用)


考虑以下替代解决方案:

 description = list(df['Description'])
 df_piv[description]
首先创建一个字典,将“ID”列映射到“Description”列

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

感谢您在问题中添加了
数据内容
,使测试更加容易。