熊猫根据条件列对行的子集进行排名

时间:2019-08-29 15:51:02

标签: pandas dataframe conditional-statements rank

我只想对scorecondition的行,按False对下面的数据框进行排名。其余的应该具有NaN的等级。

df=pd.DataFrame(np.array([[34, 65, 12, 98, 5],[False, False, True, False, False]]).T, index=['A', 'B','C','D','E'], columns=['score', 'condition'])

条件排名(下降)的期望输出为:

   score  condition  cond_rank
A     34          0     3 
B     65          0     2
C     12          1    NaN
D     98          0     1
E      5          0     4

我知道pd.DataFrame.rank()可以为正在排序的值处理NaN,但是如果要在其他列/系列上使用条件,实现此目的的最有效方法是什么? / p>

2 个答案:

答案 0 :(得分:3)

您可以按条件列rank进行过滤:

df['new'] = df.loc[~df['condition'].astype(bool), 'score'].rank()
print (df)
   score  condition  new
A     34          0  2.0
B     65          0  3.0
C     12          1  NaN
D     98          0  4.0
E      5          0  1.0

答案 1 :(得分:1)

这是where + rank。确保指定ascending=False,否则将得到错误的输出。


df['score'].where(df['condition'].eq(0)).rank(ascending=False)

A    3.0
B    2.0
C    NaN
D    1.0
E    4.0
Name: score, dtype: float64