这让我疯狂了几个小时。感觉有一个简单的解决方案,我很接近但缺少。
我有两个 DF,有两列 country_name
和 listed_country
。
在 df1 中大约有 200 条记录,listed_country 是 Yes
或 NaN
。
在 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 上的第一篇文章 - 提前致谢 =)