按行的绝对值对数据框进行排序

时间:2020-08-18 21:41:55

标签: python pandas dataframe

我有以下数据框:

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]}

3 个答案:

答案 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