使用 pandas 将一个 df 中的值替换为另一个 df 中的相应值

时间:2021-01-23 14:09:15

标签: python pandas dataframe

这让我疯狂了几个小时。感觉有一个简单的解决方案,我很接近但缺少。

我有两个 DF,有两列 country_namelisted_country

在 df1 中大约有 200 条记录,listed_country 是 YesNaN

在 df2 中,每条记录有大约 12 条记录,listed_country == Yes

我想用 df2 中的 3 条记录替换 df1 中相应的 NaN 值。

我已经尝试了几种不同的方法。首先,我缩小了两个列表之间的差值,只取我想要更新的国家/地区名称。然后使用列表比较与查询和填充。即使使用 inplace=True 这也会运行但不会更新 df1。

eul = ['American Samoa', 'Guam', 'Virgin Islands, US'] 

df1.loc[:, ['country_name', 'listed_country']].query("country_name == @eul").fillna('Yes', inplace=True)

然后我尝试了 pandas combine_first 函数,但它覆盖了 df1 中的 all NaN 值,这不是我想要的:

df1.combine_first(df2)

然后我尝试了 another post 中提出的这个解决方案,但它创建了一个新列,所以再次没有做我想要的:

d = df2.set_index('country_name').listed_country

df1['listed_country'].replace(d, inplace=True)

感觉这是一个常见的用例,必须有一个我忽略的简单解决方案?

示例 dfs

df1:

<头>
国家 listed_country
法国 NaN
印度

df2:

<头>
国家 listed_country
法国
印度

Stack 上的第一篇文章 - 提前致谢 =)

0 个答案:

没有答案