旋转数据框时的列顺序
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杂乱无章的列按手动调整后的顺序导入数据库!!!