home_team_name away_team_name ev1 ev0 ev2
0 Sassuolo Udinese 0.213624 -0.152282 -0.306609
1 Cagliari Sampdoria 0.278430 -0.086284 -0.243369
2 Benevento Spezia -0.079299 -0.000337 0.078663
3 Parma Fiorentina 0.570120 -0.078788 -0.364922
4 Lazio Juventus 0.483111 -0.040047 -0.284971
我想按降序对上面的数据帧进行排序。我想按列ev1、ev0和ev2的最大值对行进行排序。为了在第0行中澄清最大值是ev1,在第2行中最大值是ev2。这个值将作为进行排序的值。非常重要的是,我还知道哪一列是特定行中的最大值。
sort_values只按一个值排序。现在我可以得到最大值并构建一个新列,但正如我所说,我也想要最大列的名称
您可以计算最大值,分配给新列并排序:
df['max_val'] = df.filter(like='ev').max(1)
df.sort_values('max_val')
如果您不想修改数据,可以对序列进行排序并使用loc
或使用argsort
和iloc
max_val = df.filter(like='ev').max(1)
df.loc[max_val.sort_values(ascending=False).index]
# also
# df.iloc[np.argsort(-max_val, axis=1)]
输出:
home_team_name away_team_name ev1 ev0 ev2
3 Parma Fiorentina 0.570120 -0.078788 -0.364922
4 Lazio Juventus 0.483111 -0.040047 -0.284971
1 Cagliari Sampdoria 0.278430 -0.086284 -0.243369
0 Sassuolo Udinese 0.213624 -0.152282 -0.306609
2 Benevento Spezia -0.079299 -0.000337 0.078663
对于具有最大值的列名,请使用idxmax
:
df['max_col'] = df.filter(like='ev').idxmax(1)
输出:
home_team_name away_team_name ev1 ev0 ev2 max_col
0 Sassuolo Udinese 0.213624 -0.152282 -0.306609 ev1
1 Cagliari Sampdoria 0.278430 -0.086284 -0.243369 ev1
2 Benevento Spezia -0.079299 -0.000337 0.078663 ev2
3 Parma Fiorentina 0.570120 -0.078788 -0.364922 ev1
4 Lazio Juventus 0.483111 -0.040047 -0.284971 ev1