我有一个超过200列的数据框架。问题是它们生成的顺序是

['Q1.3','Q6.1','Q1.2','Q1.1',......]

我需要对列进行排序如下:

['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]

在Python中有什么方法可以做到这一点吗?


当前回答

最快的方法是:

df.sort_index(axis=1)

请注意,这会创建一个新实例。因此,你需要将结果存储在一个新变量中:

sortedDf=df.sort_index(axis=1)

其他回答

如果你需要一个任意序列而不是排序序列,你可以这样做:

sequence = ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
your_dataframe = your_dataframe.reindex(columns=sequence)

我在2.7.10测试了这个,它对我有用。

df = df.reindex(sorted(df.columns), axis=1)

这假设对列名进行排序将得到您想要的顺序。如果您的列名不是按字典顺序排序的(例如,如果您希望Q10.3列出现在Q9.1之后),则需要以不同的方式排序,但这与pandas无关。

sort方法和sorted函数允许你提供一个自定义函数来提取用于比较的键:

>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']

你可以这样做:

df[sorted(df.columns)]

编辑:更短是

df[sorted(df)]
print df.sort_index(by='Frequency',ascending=False)

如果要根据列对数据集进行排序,by是列的名称