我有两列是这样的:
NaN 35078
33515 33515
NaN 123841
NaN 124074
NaN 5699
5700 5703
NaN 7506
NaN 9142
9100 9146
NaN 10736
14557 14557
NaN 17229
我想做的是比较两个列,并使用True或False获得另一个新列。条件是每一行的每一列的值都应该不同,但不能包含NaN值。
我应该得到这样的东西:
False
False
False
False
False
True
False
False
True
False
False
False
我有df.loc[:, 'column1'] != df.loc[:, 'column2']
,但NaN值不被忽略。谢谢!
答案 0 :(得分:4)
用&
绑定另一个布尔掩码,用Series.notna
进行按位AND
:
mask = (df['column1'] != df['column2']) & (df['column1'].notna())
print (mask)
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 True
9 False
10 False
11 False
dtype: bool
如果需要同时测试两列:
mask = (df['column1'] != df['column2']) & (df[['column1', 'column1']].notna().all(axis=1))
答案 1 :(得分:0)
如果我理解正确,那么(None < None)
是False
,因此可以直接进行比较:
df = pd.DataFrame({0: {0: None, 1: 33515.0, 2: None, 3: None,
4: None, 5: 5700.0, 6: None, 7: None,
8: 9100.0, 9: None, 10: 14557.0, 11: None},
1: {0: 35078, 1: 33515, 2: 123841, 3: 124074,
4: 5699, 5: 5703, 6: 7506, 7: 9142, 8: 9146,
9: 10736, 10: 14557, 11: 17229}})
df[0] < df[1]
产量:
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 True
9 False
10 False
11 False
dtype: bool