熊猫按两个列值排序

时间:2020-10-07 14:03:29

标签: pandas

使用此数据框:

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  

3 个答案:

答案 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