按最多三列对 pandas 数据框中的示例进行排序

Sort examples in pandas dataframe by maximum of three columsn

  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或使用argsortiloc

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