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


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

最新更新