我有一个超过200列的数据框架。问题是它们生成的顺序是
['Q1.3','Q6.1','Q1.2','Q1.1',......]
我需要对列进行排序如下:
['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
在Python中有什么方法可以做到这一点吗?
我有一个超过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是列的名称