我有一个数据框,想要独立地按升序或降序排序所有列。
import pandas as pd
data = {'a': [5, 2, 3, 6],
'b': [7, 9, 1, 4],
'c': [1, 5, 4, 2]}
df = pd.DataFrame.from_dict(data)
a b c
0 5 7 1
1 2 9 5
2 3 1 4
3 6 4 2
当我使用 sort_values() 时,它并没有按照我的预期进行排序,只对一列进行了排序:
foo = df.sort_values(by=['a', 'b', 'c'], ascending=[False, False, False])
a b c
3 6 4 2
0 5 7 1
2 3 1 4
1 2 9 5
如果我使用这个答案提供的lambda函数解决方案,就可以得到想要的结果:
bar = df.apply(lambda x: x.sort_values().values)
print(bar)
a b c
0 2 1 1
1 3 4 2
2 5 7 4
3 6 9 5
但是,我认为这看起来有点笨重。
实际上,在上面的sort_values()示例中发生了什么,如何以pandas的方式对数据框中的所有列进行排序而不使用lambda函数?
df.apply(lambda x: x.sort_values().values)
,因为它更短,不需要导入numpy。 - Cord Kaldemeyerpd.DataFrame(pd.np.sort(df.values, axis=0), index=df.index, columns=df.columns)
。 - piRSquared