在数据框中排序列

时间:2015-11-05 12:28:19

标签: python sorting pandas dataframe

最近更新到pandas 0.17.0,我尝试按字母顺序排序数据框中的列。

以下是目前的列标签:

['UX2', 'RHO1', 'RHO3', 'RHO2', 'RHO4', 'UX1', 'UX4', 'UX3']

我希望他们这样:

['RHO1', 'RHO2', 'RHO3', 'RHO4', 'UX1', 'UX2', 'UX3', 'UX4']

我能够做到这一点的唯一方法是从3年前开始:How to change the order of DataFrame columns?

在0.17.0中有内置的方法吗?

3 个答案:

答案 0 :(得分:3)

要在此按字母顺序对列进行排序,您只需使用sort_index

即可
df.sort_index(axis=1)

该方法返回一个重新编制索引的DataFrame,其中列的顺序正确。

这假设所有列标签都是字符串(它不适用于混合使用,例如字符串和整数)。如果此不是的情况,您可能需要将显式排序传递给reindex方法。

答案 1 :(得分:1)

你可以对它们进行排序并将它们放回去。假设你有这个:

df = pd.DataFrame()
for i, n in enumerate(['UX2', 'RHO1', 'RHO3', 'RHO2', 'RHO4', 'UX1', 'UX4', 'UX3']):
    df[n] = [i]

看起来像这样:

df
   UX2  RHO1  RHO3  RHO2  RHO4  UX1  UX4  UX3
0    0     1     2     3     4    5    6    7

这样做:

df = df[ sorted(df.columns)]

你应该看到这个:

df
   RHO1  RHO2  RHO3  RHO4  UX1  UX2  UX3  UX4
0     1     3     2     4    5    0    7    6

答案 2 :(得分:1)

按照您想要的顺序创建列标签列表。

cols = ['RHO1', 'RHO2', 'RHO3', 'RHO4', 'UX1', 'UX2', 'UX3', 'UX4']

然后将此订单分配给您的DataFrame df:

df = df[cols]