比较Pandas框架的列是否相等,以产生True/False,甚至NaN

e7arh2l6  于 2023-11-15  发布在  其他
关注(0)|答案(4)|浏览(139)

我有两列在pandas框架应该是相同的。每列有许多NaN值。我想比较列,产生第三列包含True / False值;当列匹配时,True,当它们不匹配时,False
这就是我所尝试的:

df['new_column'] = (df['column_one'] == df['column_two'])

字符串
以上方法适用于数字,但不适用于NaN值。
我知道我可以用一个没有意义的值来替换NaN(对于我的数据,这可能是-9999),然后在我准备回显比较结果时删除它,但是我想知道是否有一个更pythonic的方法我忽略了。

xggvc2p6

xggvc2p61#

或者你可以使用equals方法:

df['new_column'] = df['column_one'].equals(df['column_two'])

字符串
这是一个包含电池的方法,无论dtype或单元格的内容如何都可以工作。如果你愿意,你也可以把它放在一个循环中。

w1jd8yoj

w1jd8yoj2#

据我所知,Pandas并不认为NaN在元素级的相等和不相等比较方法上有什么不同。而在比较整个Pandas对象(Series,DataFrame,Panel)时,它会这样做。
NaN值被视为不同(即NaN!= NaN)。-source

全元素相等Assert.eq()

分别比较每一行中两列的值。这将返回一系列Assert。

  • 选项1*:将.eq()方法与.fillna()链接。
df['new_column'] = df['column_one'].fillna('-').eq(df['column_two'].fillna('-'))

字符串
选项2:之后使用.loc().isna()替换NaNAssert。

df['new_column'] = df['column_one'].eq(df['column_two'])
df.loc[test['column_one'].isna() & test['column_two'].isna(),'new_column'] = True


请注意,这两个选项对于 column_onecolumn_two 中的源数据都是非破坏性的。还值得看看Pandas文档中的working with missing data指南。

Object wise equality assertion .equals()

将Pandas对象(Series,DataFrame,Panel)作为一个整体进行比较,将所有行及其顺序解释为单个值。这将返回一个布尔值(标量)。

df['column_one'].equals(df['column_two'])

wkyowqbh

wkyowqbh3#

你可以使用下面的循环,只要两个列的格式相同,它就可以工作,不管你的数组是否包含NAN

def Check(df):
   if df['column_one']== df['column_two']:
      return "True"
   else:
      return "False" 

df['result'] = df.apply(Check, axis=1)
df

字符串

gijlo24d

gijlo24d4#

也适用于“无”值。

df['are_equal'] = df['a'].eq(df_f['b'])

字符串
结果df:


的数据

相关问题