根据多列索引将值从一个数据框复制到另一个数据框

时间:2020-06-07 06:22:43

标签: python pandas dataframe

我有2个数据框:

df1 = 
  item  shop revenue
0   1   0   0.0
1   2   1   0.0
2   3   2   0.0

df2 =
  item  shop revenue
0   1   0   33
1   2   1   244
2   3   2   124
3   4   3   26

我想根据商品和商店的平等程度来映射df2的收入值。首先,我通过组合两列并将它们用作索引来以痛苦的方式进行操作。然后映射值,最后删除多余的列。

df1['new_id']=df1["shop"].astype(str) +"_"+ df1["item"].astype(str)
df2['new_id']=df2["shop"].astype(str) +"_"+ df2["item"].astype(str)
df1 = df1.set_index("new_id")
df1.update(df2.set_index("new_id"))
df1 = df1.reset_index()
df1 = df1.drop(['new_id'],axis=1)
df2 = df2.drop(['new_id'],axis=1)

df1 =
   item shop revenue
0   1   0   33.0
1   2   1   244.0
2   3   2   124.0

必须有一种更好,更简洁的方法来使用更简单的代码。 您能给我建议一个更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.merge,方法是选择df1中的2列,而没有on参数用于按列交叉来合并:

df = df1[['item','shop']].merge(df2)

所以它的工作方式类似于:

df = df1[['item','shop']].merge(df2, on=['item','shop'])

您的解决方案应以MultiIndex的两列更改为DataFrame.set_index

df11 = df1.set_index(['item','shop'])
df11.update(df2.set_index(['item','shop']))
df = df11.reset_index()