python - Pandas:如何匹配/过滤来自 2 个不同数据帧的相同键/ID 值(重复项)并替换值?
问题描述
我有 2 个不同大小的数据框。第一个 dataframe( df1
) 有 4 列,但其中两列与第二个 dataframe() 中的列同名,第二个 dataframe( df2
) 仅包含 2 个列。共同的列是['ID']
和['Department']
。
我想检查是否有任何ID
来自。如果是这样,我想用价值替换价值。df2
df1
df1['Department']
df2['Department']
例如,df1
看起来像这样:
ID Department Yrs Experience Education
1234 Science 1 Bachelors
2356 Art 3 Bachelors
2456 Math 2 Masters
4657 Science 4 Masters
df2
看起来像这样:
ID Department
1098 P.E.
1234 Technology
2356 History
我想检查ID
fromdf2
是否在df1
,如果是,请更新Department
. 输出应如下所示:
ID Department Yrs Experience Education
1234 **Technology** 1 Bachelors
2356 **History** 3 Bachelors
2456 Math 2 Masters
4657 Science 4 Masters
预期的更新以df1
粗体显示
有没有一种有效的方法来做到这一点?
感谢您花时间阅读本文并提供帮助。
解决方案
您可以使用ID
to与通过设置on作为索引并取from列(这充当映射表)df1
形成的 Pandas 系列进行映射。ID
df2
Department
df2
然后,如果ID
from不匹配df2
,我们填充 from 的原始值Department
(df1
以在不匹配的情况下保留原始值):
df1['Department'] = (df1['ID'].map(df2.set_index('ID')['Department'])
.fillna(df1['Department'])
)
结果:
print(df1)
ID Department Yrs Experience Education
0 1234 Technology 1 Bachelors
1 2356 History 3 Bachelors
2 2456 Math 2 Masters
3 4657 Science 4 Masters
推荐阅读
- javascript - 如何在 chrome 上从内部网站启动内部应用程序?
- c - Memcpy 覆盖 3 维数组中的区域
- java - 我正在尝试构建一个应用程序,它会在 wifi 状态更改时创建通知
- java - 为默认 recyclerView 创建展开动画(将视图的可见性从消失更改为可见)
- ruby-on-rails - Facebook 登录有时不会返回电子邮件,即使已获得授权
- javascript - 从视频标签中的所有帧拍摄快照
- python - 将 Scala 连接到 Azure DW 转换为 PySpark
- git - 如何将新分支推送到公共项目
- scroll - 如何防止滚动偏移量大于视图内容(NestedScrollView 和 TabBarView)
- ssl-certificate - 手动更新 certbot 证书