通过忽略空值来比较列(熊猫)

时间:2021-06-06 07:11:24

标签: python pandas

数据框:

         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(如果排名不断增加忽略空值)

2 个答案:

答案 0 :(得分:5)

我们可以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

答案 1 :(得分:2)

您可以先使用 dropna,然后使用 is_monotonic

df['Diff'] = df.set_index('name').apply(lambda x: int(x.dropna().is_monotonic), 1)

或者您可以使用它来更具体地了解差异。

df = df.set_index('name').apply(lambda x: int(all(x.dropna().diff().fillna(1).eq(1))), 1)