通过忽略空值来比较列(熊猫)
数据框:
data=pd.DataFrame({'name':['A','B','C'],
'rank':[np.nan,2,3],
'rank1':[2,np.nan,2],
'rank2':[3,1,np.nan],
'rank4':[4,2,3]})
我的代码:
data['Diff']=np.where((data['rank']<data['rank1'])&(data['rank1']<data['rank2'])&(data['rank2']<data['rank4']),1,0)
要求忽略空值并比较其余的数值希望 A 的差异为 1(如果排名不断增加,则忽略空值)
回答
我们可以filter在rank像列,那么前锋填补axis=1传播最后的有效值,然后计算diff沿着axis=1以检查单调
r = df.filter(like='rank')
data['diff'] = r.ffill(1).diff(axis=1).fillna(0).ge(0).all(1)
name rank rank1 rank2 rank4 diff
0 A NaN 2.0 3.0 4 True
1 B 2.0 NaN 1.0 2 False
2 C 3.0 2.0 NaN 3 False