根据规则操作列中的值

时间:2019-05-25 09:26:49

标签: python pandas

我在熊猫数据框中有3列-A, B and C。我想做的是,A is not null AND B|C are not null中的任何地方A都应设置为null

if(dffinal['A'].loc[dffinal['A'].notnull()] & 
    (dffinal['B'].loc[dffinal['B'].notnull()] | 
    dffinal['C'].loc[dffinal['C'].notnull()])):
    dffinal['A'] = np.nan

这是我得到的错误:无法从空轴上进行非空取物。

2 个答案:

答案 0 :(得分:2)

使用df.loc[]

df.loc[df.A.notna() & (df.B.notna()|df.C.notna()),'A']=np.nan

答案 1 :(得分:2)

这里没有必要先满足条件,因此解决方案应该简化:

dffinal = pd.DataFrame({
         'A':[np.nan,np.nan,4,5,5,np.nan],
         'B':[7,np.nan,np.nan,4,np.nan,np.nan],
         'C':[1,3,5,7,np.nan,np.nan],
})

print (dffinal)
     A    B    C
0  NaN  7.0  1.0
1  NaN  NaN  3.0
2  4.0  NaN  5.0
3  5.0  4.0  7.0
4  5.0  NaN  NaN
5  NaN  NaN  NaN

mask = (dffinal['B'].notnull() | dffinal['C'].notnull())

dffinal.loc[mask, 'A'] = np.nan
print (dffinal)
     A    B    C
0  NaN  7.0  1.0
1  NaN  NaN  3.0
2  NaN  NaN  5.0
3  NaN  4.0  7.0
4  5.0  NaN  NaN
5  NaN  NaN  NaN

与第一个条件相同的输出:

mask = dffinal['A'].notnull() & (dffinal['B'].notnull() | dffinal['C'].notnull())

dffinal.loc[mask, 'A'] = np.nan
print (dffinal)
     A    B    C
0  NaN  7.0  1.0
1  NaN  NaN  3.0
2  NaN  NaN  5.0
3  NaN  4.0  7.0
4  5.0  NaN  NaN
5  NaN  NaN  NaN