旋转数据框时的列顺序

Posted

技术标签:

【中文标题】旋转数据框时的列顺序【英文标题】:Column order when pivoting dataframe 【发布时间】:2018-01-11 10:15:07 【问题描述】:

我有一个这样的数据框

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]

【问题讨论】:

感谢您将data_dict 放入您的问题中,让测试变得更加容易。 【参考方案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

【讨论】:

【参考方案2】:

考虑这个替代解决方案:

首先创建一个字典,将“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')

【讨论】:

以上是关于旋转数据框时的列顺序的主要内容,如果未能解决你的问题,请参考以下文章

为啥调用 location.reload(); 后我的表中的行顺序会发生变化?关闭模态框时

PB数据窗口列手动移动后,数据的却顺序没变。咋把Excel杂乱无章的列按手动调整后的顺序导入数据库!!!

pandas改变dataframe的列的顺序改变数据列的排列次序

如何在重新排序数据网格的列后获取新的列顺序?

Innodb存储表结构

附加的列(变量)顺序附加