我有一个像这样的数据框
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]
答案 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')