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

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

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

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

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


当前回答

一个用例是,您已经用某个前缀命名了(一些)列,并且您希望这些列都用这些前缀排序,并以某种特定的顺序(不是字母顺序)排序。

例如,你可以用Ft_开头所有的特征,用Lbl_开头标签,等等,你想要所有无前缀的列,然后是所有特征,然后是标签。你可以用下面的函数来做到这一点(我会注意到使用sum来减少列表可能存在的效率问题,但这不是一个问题,除非你有很多列,而我没有):

def sortedcols(df, groups = ['Ft_', 'Lbl_'] ):
    return df[ sum([list(filter(re.compile(r).search, list(df.columns).copy())) for r in (lambda l: ['^(?!(%s))' % '|'.join(l)] + ['^%s' % i  for i in l ] )(groups)   ], [])  ]

其他回答

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

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

最快的方法是:

df.sort_index(axis=1)

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

sortedDf=df.sort_index(axis=1)

你可以这样做:

df[sorted(df.columns)]

编辑:更短是

df[sorted(df)]

对于几个列,你可以按你想要的顺序排列:

#['A', 'B', 'C'] <-this is your columns order
df = df[['C', 'B', 'A']]

这个例子展示了对列进行排序和切片:

d = {'col1':[1, 2, 3], 'col2':[4, 5, 6], 'col3':[7, 8, 9], 'col4':[17, 18, 19]}
df = pandas.DataFrame(d)

你会得到:

col1  col2  col3  col4
 1     4     7    17
 2     5     8    18
 3     6     9    19

然后做:

df = df[['col3', 'col2', 'col1']]

导致:

col3  col2  col1
7     4     1
8     5     2
9     6     3     

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

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

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