我有一个超过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中有什么方法可以做到这一点吗?
当前回答
sort方法和sorted函数允许你提供一个自定义函数来提取用于比较的键:
>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']
其他回答
print df.sort_index(by='Frequency',ascending=False)
如果要根据列对数据集进行排序,by是列的名称
不要忘记在Wes的答案中添加“inplace=True”,或者将结果设置为新的DataFrame。
df.sort_index(axis=1, inplace=True)
sort方法和sorted函数允许你提供一个自定义函数来提取用于比较的键:
>>> ls = ['Q1.3', 'Q6.1', 'Q1.2']
>>> sorted(ls, key=lambda x: float(x[1:]))
['Q1.2', 'Q1.3', 'Q6.1']
你也可以做得更简洁:
df.sort_index(axis=1)
确保你把结果赋值回去:
df = df.sort_index(axis=1)
或者,就地做:
df.sort_index(axis=1, inplace=True)
一个用例是,您已经用某个前缀命名了(一些)列,并且您希望这些列都用这些前缀排序,并以某种特定的顺序(不是字母顺序)排序。
例如,你可以用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) ], []) ]