我有一个超过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']
其他回答
不要忘记在Wes的答案中添加“inplace=True”,或者将结果设置为新的DataFrame。
df.sort_index(axis=1, inplace=True)
Tweet的答案可以传递到BrenBarn的答案上面
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
举个例子,你可以说:
vals = randint(low=16, high=80, size=25).reshape(5,5)
cols = ['Q1.3', 'Q6.1', 'Q1.2', 'Q9.1', 'Q10.2']
data = DataFrame(vals, columns = cols)
你会得到:
data
Q1.3 Q6.1 Q1.2 Q9.1 Q10.2
0 73 29 63 51 72
1 61 29 32 68 57
2 36 49 76 18 37
3 63 61 51 30 31
4 36 66 71 24 77
然后做:
data.reindex_axis(sorted(data.columns, key=lambda x: float(x[1:])), axis=1)
导致:
data
Q1.2 Q1.3 Q6.1 Q9.1 Q10.2
0 2 0 1 3 4
1 7 5 6 8 9
2 2 0 1 3 4
3 2 0 1 3 4
4 2 0 1 3 4
print df.sort_index(by='Frequency',ascending=False)
如果要根据列对数据集进行排序,by是列的名称
如果你需要一个任意序列而不是排序序列,你可以这样做:
sequence = ['Q1.1','Q1.2','Q1.3',.....'Q6.1',......]
your_dataframe = your_dataframe.reindex(columns=sequence)
我在2.7.10测试了这个,它对我有用。
你也可以做得更简洁:
df.sort_index(axis=1)
确保你把结果赋值回去:
df = df.sort_index(axis=1)
或者,就地做:
df.sort_index(axis=1, inplace=True)