我有一个类似于
的数据框(df)PID SID RID
124 294 294
954 299 299
NAN 949 493
959 NAN 959
059 059 059
0405 NAN NAN
493 942 395
我用过
testdf = df.eq(df["PID"], axis='index').all(axis=1)
获取一个列表(testdf),报告角色中的值是否相等,这是有效的,但NAN会妨碍。
我尝试使用
testdf = df.eq(df["PID"], axis='index').all(axis=1).notnull()
但出于某种原因,当我知道某些行没有时,它会报告所有内容相等。
以下是我希望testdf在最后看起来像什么的示例
0 False
1 False
2 False
3 True
4 True
5 False
6 False
答案 0 :(得分:1)
如果可以忽略NaN
,我们可以在每列中填充NaN
(RID
和SID
)。如果剩余值等于PID
,则结果为True
,否则为False
。
您可以在DataFrame
的副本上执行此操作,以便不会更改原始数据。
df['SID'] = df['SID'].fillna(df['RID'])
df['RID'] = df['RID'].fillna(df['SID'])
testdf = df.eq(df['PID'], axis='index').all(axis=1)
testdf
结果如下:
0 False
1 False
2 False
3 True
4 True
5 False
6 False
答案 1 :(得分:0)
此问题是由np.nan == np.nan
为False
且np.nan != np.nan
为True
的事实引起的。一个快速的解决方法是替换nan
和df
中的任何df2
,而不是您的数据框中的内容,例如foo
:
df = df.fillna("foo")
df2 = df2.fillna("foo")
然后,您可以根据需要比较数据框。