根据列对数据帧进行 Argsort

Jav*_*lve 5 python dataframe pandas

我有以下数据帧:

用户身份 列_1 列_2 第 3 列
一种 4.959 3.231 1.2356
0.632 0.963 2.4556
C 3.234 7.445 5.3435
D 1.454 0.343 2.2343

我想对上一列的 argsort wrt 列进行排序:

用户身份 第一的 第二 第三
一种 第 3 列 列_2 列_1
列_1 列_2 第 3 列
C 列_1 第 3 列 列_2
D 列_2 列_1 第 3 列

Ch3*_*teR 6

您可以np.argsort在轴 1 上使用。然后使用numpy indexing转换df.columnsnumpy数组。pd.Index.to_numpy

df = df.set_index('userId') # If userId is not index already.
idx = df.values.argsort(axis=1)
out = pd.DataFrame(df.columns.to_numpy()[idx], index=df.index)

               0         1         2
userId
A       column_3  column_2  column_1
B       column_1  column_2  column_3
C       column_1  column_3  column_2
D       column_2  column_1  column_3
Run Code Online (Sandbox Code Playgroud)

  • 设置索引后的 `df.columns.to_numpy()[np.argsort(df)]` 也应该有效:-) (2认同)