根据Pandas中的一个公共列从另一个数据框更新多个列

阿邦

给定以下两个数据框:

df1:

   id city district  year  price
0   1  bjs      cyq  2018     12
1   2  bjs      cyq  2019      6
2   3   sh       hp  2018      4
3   4  shs      hpq  2019      3

df2:

   id city district  year
0   1   bj       cy  2018
1   2   bj       cy  2019
2   4   sh       hp  2019

比方说,在一些值city,并districtdf1有错误,所以我需要更新citydistrict价值观df1与那些df2基于id,我预期的结果是这样的:

   id city district  year  price
0   1   bj       cy  2018     12
1   2   bj       cy  2019      6
2   3   sh       hp  2018      4
3   4   sh       hp  2019      3

我该如何在熊猫中做到这一点?谢谢。

更新:

解决方案1:

cities = df2.set_index('id')['city']
district = df2.set_index('id')['district']

df1['city'] = df1['id'].map(cities)
df1['district'] = df1['id'].map(district)

解决方案2:

df1[["city","district"]] = pd.merge(df1,df2,on=["id"],how="left")[["city_y","district_y"]]

print(df1)

出:

   id city district  year  price
0   1   bj       cy  2018     12
1   2   bj       cy  2019      6
2   3  NaN      NaN  2018      4
3   4   sh       hp  2019      3

请注意city,并districtidIS3NaNS,但我想,从保留值df1

斯科特·波士顿

尝试combine_first

df2.set_index('id').combine_first(df1.set_index('id')).reset_index()

输出:

   id city district  price    year
0   1   bj       cy   12.0  2018.0
1   2   bj       cy    6.0  2019.0
2   3   sh       hp    4.0  2018.0
3   4   sh       hp    3.0  2019.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas - 根据另一个填充一个数据框列

根据id列中的公共值从另一个数据框中减去数据框的行

根据另一个数据框列更新数据框列,无需 for 循环

根据另一个数据框的多个列过滤数据框

如何根据另一个数据框中的列的存在来更新数据框中列的值

Pandas-根据2个数据框之间的公共列聚合另一个数据框的列值

根据另一个数据框中的列的值更新一个数据框中的现有列

根据另一个数据集中的列值在一个数据框中创建列

根据来自另一个数据框的多个列条件创建列

根据另一个数据框替换一个数据框中的列中的多个值

如何基于另一个数据框更新一个数据框中的列?

根据python中另一个数据框的2列过滤数据框

根据另一个数据框计算数据框中的列值

使用条件从另一个数据框中更新值来更新pandas数据框列

Python Pandas根据在另一个数据框中的查找将列添加到数据框

根据Pandas中的ID将列值从一个数据框复制到另一个数据框

根据另一个数据框中的列分配值列

根据索引号在另一个数据框中添加一列

Python Pandas:根据另一个数据框的类别值创建新列

根据三列将一个Pandas数据框中的行与另一个数据框中的行匹配

如何使用另一个数据框添加数据框并基于列更新公共值

根据熊猫中的另一个数据框更改列中的值

R:根据另一个数据框中的一列向数据框中添加一列会导致多个重复行

如何根据另一个数据框中的列填充?

根据与另一个数据框中的值匹配的行数创建新列

Python根据另一个数据框中的列值匹配列名

根据列中的值填充另一个数据框的值

根据另一个数据框重命名多列中的记录

根据另一个数据框替换列中的值