按最多三列对 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
或使用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
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