繁体   English   中英

Python Pandas:连接并更新来自另一个 dataframe 的 dataframe 值

[英]Python Pandas: Concatenate and update dataframe values from another dataframe

我有这 2 个数据框。

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)
  • 所有其他产品保持不变。

谢谢您的帮助。

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

  • 通过合并Product上的两个 DataFrame 从df1获取Quantity值。 来自df1Price被降低,这样这些价格就不会添加到最终的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM