首页 > 解决方案 > 将项目分配给熊猫数据框

问题描述

我正在处理一个库存警报问题,用户提供电子邮件 ID、他/她感兴趣的产品、3 家商店,当它有库存时,他可以从那里取货。我在 pandas 数据框中有数据,其中有电子邮件 ID、产品 ID、3 个商店映射到它。

import pandas as pd
import numpy as np
df = pd.DataFrame([['nick_1@gmail.com', 9999, 1000, 1001, 1002, np.nan ], 
                   ['sam_s@gmail.com', 9999, 1000, 1001, 1002, np.nan ],
                   ['george_l@gmail.com', 9999, 1000, 1001, 1500, np.nan ],
                   ['fred_g@gmail.com', 9777, 1500, 1501, 1155, np.nan ],
                   ['katie_l@gmail.com', 9777, 1500, 1501, 1155, np.nan ]], 
columns=['CUSTOMER_EMAIL', 'PRODUCT_ID', 'STORE_1', 'STORE_2', 'STORE_3', 'SEND_NOTIFICATION'])

在此处输入图像描述

我需要根据下面另一个数据框中的库存情况将 SEND_NOTIFICATION 列设置为 True / False:

stock = pd.DataFrame([[9999, 1000, 2], 
                      [9999, 1002, 1 ],
                      [9977, 1500, 1 ]
                   ], columns=['PRODUCT_ID', 'STORE_ID',  
                              'STOCK_AVAILABLE'])

在此处输入图像描述

在商店 ID 1000 中,产品 9999 有两件库存商品。因此,最多可以为两个注册的用户发送通知。在这种情况下,nick_1@gmail.com 的 SEND_NOTIFICATION 列可以将 sam_s@gmail.com 设置为 True。行 george_l@gmail 设置为 False,因为映射到他的任何商店中都没有足够的可用库存。

产品 9977 在商店 ID 1500 中有一件商品。因此可以将一位用户 fred_g@gmail.com 设置为 True,而 katie_l 由于缺货而设置为 False

输出应如下所示: 在此处输入图像描述

我正在考虑一种简单的方法,即遍历库存数据框中的每个项目,搜索产品-库存组合的次数与可用库存一样多。

for index, row in stock_data.iterrows():
    stock_available = row["SOH"]
    while stock_available >= 0:
        stock_available -= 1
        <search for product id - store id combination in other dataframe and mark records as true>

有没有更好的方法来实现这个结果?我认为 pandas cumsum 是我可以使用的东西,但我无法理解如何实现逻辑。

标签: pythonpandasdataframe

解决方案


推荐阅读