PythonPandas:连接并更新来自另一个 Dataframe 的 Dataframe 值

cczfrluj  于 2023-01-24  发布在  Python
关注(0)|答案(1)|浏览(161)

我有这2个 Dataframe 。

import pandas as pd

data1 = {
         'Product': ['product1', 'product2', 'product3'],
         'Price': [200, 300, 400],
         'Quantity': [10, 5, 20],
    }
df1 = pd.DataFrame(data1, columns= ['Product','Price','Quantity'])

print(df1)

data2 = {
         'Product': ['product1','product2','product4'],
         'Price': [200, 1000,50],
}

df2 = pd.DataFrame(data2, columns= ['Product','Price'])

DF1:

Product  Price  Quantity
0  product1    200        10
1  product2    300         5
2  product3    400        20

DF2:

Product  Price
0  product1    200
1  product2   1000
2  product4     50

我搜索连接和更新,以获得此 Dataframe :

Product  Price  Quantity
0  product1    200       10
1  product2   1000       5
2  product3     -1       20
2  product4     50       NaN

这意味着:

  • df2中的新产品(product4)必须添加可用信息(价格)
  • 不在df2中的产品应保留,价格设置为-1
  • df1和df2中的产品只需更新其价格(产品2)
  • 所有其他产品保持不变。

谢谢你的帮助。

gcuhipw9

gcuhipw91#

下面是一个基于合并的解决方案:

  • 通过合并Product上的两个 Dataframe ,从df1获取Quantity值。删除df1中的Price,以便不会将这些价格添加到最终 Dataframe 中。这是外部合并,以确保结果包含df1df2中的产品。
  • 除了需要用-1替换缺少的价格并根据产品进行排序之外,上面的步骤几乎可以得到您想要的结果。
final = df2.merge(df1.drop('Price', axis=1), on='Product', how='outer')
final['Price'].fillna(-1, inplace=True)
final.sort_values('Product', inplace=True)

结果:

Product   Price  Quantity
0  product1   200.0      10.0
1  product2  1000.0       5.0
3  product3    -1.0      20.0
2  product4    50.0       NaN

相关问题