我有以下数据框:
import pandas as pd
data = {0: [-1, -14], 1: [-3, 2], 2: [7, 10], 4: [-10, 15]}
df = pd.DataFrame(data)
我知道如何对特定行进行排序:
df.sort_values(by=0, ascending=False, axis=1)
如何通过第一行的绝对值对数据框进行排序? 在这种情况下,我会得到类似的东西:
sorted_data = {0: [-10, 15], 1: [7, 10], 2: [-3, 2], 4: [-1, -14]}
答案 0 :(得分:2)
通过对行0
进行切片并将其索引传递给对原始df
的索引来对系列进行排序
df_sorted = df[df.iloc[0].abs().sort_values(ascending=False).index]
Out[94]:
4 2 1 0
0 -10 7 -3 -1
1 15 10 2 -14
答案 1 :(得分:1)
让我们尝试argsort
df = df.iloc[:,(-df.loc[0].abs()).argsort()]
答案 2 :(得分:1)
Pandas 1.1给出了一个key
参数:
df.sort_values(0, axis=1, key=np.abs, ascending=False)
4 2 1 0
0 -10 7 -3 -1
1 15 10 2 -14