Python 用另一个数据帧列中的值填充数据帧列的步骤

Python 用另一个数据帧列中的值填充数据帧列的步骤,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: df1 = item sale 0 7 10.0 1 4 10.0 2 6 10.0 3 5 10.0 4 5 10.0 5 6 10.0 6 4 10.0 df2 = item sale 0 1 7 1 2 6 2 3 5 3 4 4 4 5 3 我想更改df1 sales列的值,取df2 sales列的值 我使用代码: df1.loc[df1.item.isin

我有两个数据帧:

df1 = 
  item  sale
0   7   10.0
1   4   10.0
2   6   10.0
3   5   10.0
4   5   10.0
5   6   10.0
6   4   10.0

df2 =
   item sale
0   1   7
1   2   6
2   3   5
3   4   4
4   5   3
我想更改df1 sales列的值,取df2 sales列的值

我使用代码:

df1.loc[df1.item.isin(df2.item), ['sale']] = df2[['sale']]
我得到

df1 =
item    sale
0   7   10.0
1   4   6.0
2   6   10.0
3   5   4.0
4   5   3.0
5   6   10.0
6   4   NaN
我想要的结果是:

df1 =
  item  sale
0   7   10.0
1   4   4.0
2   6   10.0
3   5   3.0
4   5   3.0
5   6   10.0
6   4   4.0

这两个数据帧按项目编号关联。因此,将项目编号设置为两个数据帧上的索引,使用df2在df1上运行一个方法,然后重置索引

df1 = df1.set_index("item")
df1.update(df2.set_index("item"))
df1.reset_index()

    item    sale
0   7   10.0
1   4   4.0
2   6   10.0
3   5   3.0
4   5   3.0
5   6   10.0
6   4   4.0

从未使用过
df.update
。我学到了一些新东西。回答得好,谢谢。成功了。你知道我的代码有什么问题吗。熊猫将尝试在索引上对齐,并根据对齐的索引分配值。因此,如果我们查看ur
df1.item.isin(df2.item),['sale']
,返回的索引将是1,3,4,6;但是,对于相同的值,df2的索引是1,3,4,因此它将把1,3,4处的值传递给df1,这不是我们想要的,因为df2中没有6,所以它返回空值。这就是为什么第一步是将项目作为索引,这样熊猫就会按照我们想要的方式排列,然后事情就应该解决了。