Python 使用DataFrame从另一个列表中减去列表,其中一个列表具有嵌套的dict

Python 使用DataFrame从另一个列表中减去列表,其中一个列表具有嵌套的dict,python,pandas,dataframe,Python,Pandas,Dataframe,我正在用python创建一个库存管理系统 假设我们有这样的库存: inventory=[{“产品标识”:0,“数量”:30},{“产品标识”:1,“数量”:25},{“产品标识”:2,“数量”:25}] 用户下这样的订单: order={“order_id”:123,“requested”:[{“product_id”:0,“quantity”:2},{“product_id”:2,“quantity”:4}]} 理想情况下,控制台会打印以下内容: inventory=[{“产品标识”:0,“数

我正在用python创建一个库存管理系统

假设我们有这样的库存:
inventory=[{“产品标识”:0,“数量”:30},{“产品标识”:1,“数量”:25},{“产品标识”:2,“数量”:25}]

用户下这样的订单:
order={“order_id”:123,“requested”:[{“product_id”:0,“quantity”:2},{“product_id”:2,“quantity”:4}]}

理想情况下,控制台会打印以下内容:
inventory=[{“产品标识”:0,“数量”:28},{“产品标识”:1,“数量”:25},{“产品标识”:2,“数量”:21}]

到目前为止,我一直在尝试使用Pandas模块中的DataFrame执行此操作:

import Pandas as pd

inventory = [{"product_id": 0, "quantity": 30}, {"product_id": 1, "quantity": 25}, {"product_id": 2, "quantity": 25}]
order = {"order_id": 123, "requested": [{"product_id": 0, "quantity": 2}, {"product_id": 2, "quantity": 4}]}

def process_order(order):
    global inventory
    df1=pd.DataFrame(order) #Something needs to go here to point to the nested dict, right?
    df2=pd.DataFrame(inventory)
    dfsum=pd.concat([df1, df2]).groupby('product_id').difference().reset_index()
    inventory=dfsum.to_dict(orient='records')
    print(inventory)

但这返回了一个错误
编辑:这是全部错误不要试图从“订单”本身创建数据帧。您要从库存中减去的是
订单[“已请求”]
。获取这两个数据集的共同数据(“product_id”),并将其作为数据帧的索引。现在减法将像索引值一样进行减法。由于订单不包含库存中所有可能的项目,因此您可以使用
subtract
方法填充其他值

设置以“product_id”作为索引的数据帧

建立一个系列,保存库存中的新数量

>>> new_quantity = inventory_df["quantity"].subtract(order_df["quantity"], fill_value=0.0)
>>> new_quantity
product_id
0    28.0
1    25.0
2    21.0
Name: quantity, dtype: float64
确保你不会因为交付的产品太少而被起诉

>>> if (new_quantity < 0).any():
...     print("bad news")
... 

“但这返回了一个错误。”什么错误?@juanpa.arrivillaga-KeyError:'product_-id'包括堆栈跟踪在内的完整错误消息是什么?请,这包括了大量有用的信息。@juanpa.arrivillaga我已经在问题中添加了完整的错误,作为一个编辑(它有太多的字符,无法放入注释中),这是有效的!非常感谢。
>>> if (new_quantity < 0).any():
...     print("bad news")
... 
>>> inventory_df["quantity"] = new_quantity
>>> inventory_df
            quantity
product_id          
0               28.0
1               25.0
2               21.0
>>>