我正在使用具有两列约束的DataFrame
,因此当第一个定义了一个值时,另一个应该也定义了相应的值。我想算一想这种约束不成立的情况。
示例
df = pd.DataFrame({'a': [np.nan, 2, np.nan, 4, 5, 6],'b': [11, 12 , np.nan, 14, 15, np.nan]})
a b
0 NaN 11
1 2 12
2 NaN NaN
3 4 14
4 5 15
5 6 NaN
定义了a
列中的值时,也必须定义b
列中的对应值。这不适用于索引为5
的行,因此这种情况下的结果应为1
。
答案 0 :(得分:1)
尝试一下:
len(df.loc[(df.a.notnull()) & (df.b.isnull())])
上面的方法查找所有a
不是NaN
和b
是NaN
的行,而len()
只是计算结果数据帧中的行数
答案 1 :(得分:1)
您可以计算布尔序列,然后使用pd.Series.sum
:
m1 = df['a'].notnull()
m2 = df['b'].isnull()
res = (m1 & m2).sum()
之所以可行,是因为在计算中使用布尔值时,1
/ 0
分别被认为是True
/ False
。