使用此数据框:
item XP_home XP_away
A 0.000000 5.229861
B 6.412500 0.000000
C 5.037361 0.000000
D 0.000000 3.394792
我可以这样排序:
df = df.sort_values(by='XP_home', ascending=False).head(2)
并获得:
B 6.412500 0.000000
C 5.037361 0.000000
或:
df = df.sort_values(by='XP_away', ascending=False).head(2)
并获得:
A 0.000000 5.229861
D 0.000000 3.394792
但是我如何按两个列值的最高值进行排序,以获得:
item XP_home XP_away
B 6.412500 0.000000
A 0.000000 5.229861
C 5.037361 0.000000
D 0.000000 3.394792
答案 0 :(得分:3)
让我们尝试argsort
out = df.iloc[(-df.filter(like = 'XP').max(1)).argsort()]
item XP_home XP_away
1 B 6.412500 0.000000
0 A 0.000000 5.229861
2 C 5.037361 0.000000
3 D 0.000000 3.394792
答案 1 :(得分:2)
您可以按行对最大值进行排序:
print (df.assign(val=df[["XP_home", "XP_away"]].max(1))
.sort_values("val", ascending=False).drop("val", 1))
item XP_home XP_away
1 B 6.412500 0.000000
0 A 0.000000 5.229861
2 C 5.037361 0.000000
3 D 0.000000 3.394792
答案 2 :(得分:0)
自pandas 1.1.0
起,您可以使用key
自变量计算排序值
df.sort_values('XP_home', key=lambda _: df[['XP_away', 'XP_home']].max(1), ascending=False)
出局:
item XP_home XP_away
1 B 6.412500 0.000000
0 A 0.000000 5.229861
2 C 5.037361 0.000000
3 D 0.000000 3.394792