给出以下数据框:
df = pd.DataFrame({'A' : ['1','2','3','7'],
'B' : [7,6,5,4],
'C' : [5,6,7,1],
'D' : [1,9,9,8]})
df=df.set_index('A')
df
B C D
A
1 7 5 1
2 6 6 9
3 5 7 9
7 4 1 8
我想按顺序对底行的列顺序进行排序:
D B C
A
1 1 7 5
2 9 6 6
3 9 5 7
7 8 4 1
提前致谢!
答案 0 :(得分:2)
最简单的方法是转置,然后sort_values
,然后转置回来。
df.T.sort_values('7', ascending=False).T
或
df.T.sort_values(df.index[-1], ascending=False).T
给出:
D B C
A
1 1 7 5
2 9 6 6
3 9 5 7
7 8 4 1
测试
我的解决方案
%%timeit
df.T.sort_values(df.index[-1], ascending=False).T
1000 loops, best of 3: 444 µs per loop
替代解决方案
%%timeit
df[[c for c in sorted(list(df.columns), key=df.iloc[-1].get, reverse=True)]]
1000 loops, best of 3: 525 µs per loop
答案 1 :(得分:2)
这是一个不涉及换位的变体:
df = df[[c for c in sorted(list(df.columns), key=df.iloc[-1].get, reverse=True)]]
答案 2 :(得分:2)
您可以将 sort_values(按行的索引位置)与 axis=1 一起使用:
df.sort_values(by=df.index[-1],axis=1,inplace=True)