python - Pandas :按包含 nan 的列的多个条件过滤数据框

标签 python pandas dataframe

连接到: Pandas: add column with index of matching row from other dataframe

将多个列与第二个数据框中的对应列进行匹配,并返回第二个数据框中匹配行的索引。

df1['new_column'] =  df1.apply(lambda x: df2[(df2.col1 == x.col1)
                                           & (df2.col2 == x.col2)
                                           & (df2.col3 == x.col3)
                                           & (df2.col4 == x.col4)
                                           & (df2.col5 == x.col5)].index[0], axis=1)

上面的代码就像一个魅力...除非其中一列可以包含 nan 值,因为 nan != nan。 换句话说,即使 df1 中的 col1:col4df1< 中的 df2col5 匹配/strong> 和 df2nan 它无法匹配它返回空索引对象。
如果 col1:col5 匹配,无论它们是否包含值或 nan,我都需要它返回 True。

有人知道解决方案吗?

最佳答案

此处的一种解决方法是简单地使用 fillna 将所有 na 值替换为类似 'NaN' 的字符串。

只需使用:

df1 = df1.fillna('NaN')
df2 = df2.fillna('NaN')

然后使用您现有的代码。

关于python - Pandas :按包含 nan 的列的多个条件过滤数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160209/

相关文章:

python - 根据 Pandas 数据框规则创建新列

Python - 在数据框中编码基因组数据

python - Django 通过 smtp.gmail.com 发送电子邮件时遇到问题

python - 跟踪玩家健康基于文本的游戏 - Python

python - 如何检查一列的每个值是否正好映射到另一列中的一个值?

python - pandas DataFrame.to_sql 和 nan 值

python - 将 pandas 日期时间转换为小时 :min rounded to 15 min

python - tkinter 在打开对话框或创建窗口时打开第二个窗口

php - 从 PHP worker 到 Python 线程

python - 接收 pandas DataFrame 中列的 NaN