python - 创建新列,其中日期对应于一个数量是否大于或等于另一个数量

标签 python pandas

第一个数据帧显示 qty_ordered(表示每个客户订购的商品数量)和 qty_needed(对每行后的商品数量进行累计求和,以确定某个特定客户可以收到其订单之前必须满足多少商品)。 示例:第 4 行订购了 1 件,在收到 1 件之前,他们还剩 7 件。

qty_ordered   qty_needed
2             2
3             5
1             6
1             7
4             11
3             14
1             15
3             18
20            38

第二个数据框显示shipped_qty,即在特定日期ship_date 发货的单位数量。

shipped_qty   ship_date
10            1/20/2022
24            2/20/2022
42            3/20/2022

我想通过添加一列来组合这些数据集,该列显示发货数量大于或等于 qty_needed 的发货日期。

qty_ordered   qty_needed  ship_date
2             2           1/20/2022
3             5           1/20/2022
1             6           1/20/2022
1             7           1/20/2022
4             11          2/20/2022
3             14          2/20/2022
1             15          2/20/2022
3             18          2/20/2022
20            38          3/20/2022

我首先尝试使用一个简单的 for 循环语句,但这只是返回所有的发货日期,而不是我需要的日期。在 Excel 中,我会执行一个 IF 语句,如果 qty_needed <=shipping_qty,则返回ship_date。

最佳答案

您可以使用pandas.merge_asof来完成此类任务。假设“qty_ordered”和“qty_needed”的 DataFrame 名为 df,“shipped_qty”的 DataFrame 名为 df_dates,以下代码行即可实现此目的:

pd.merge_asof(df, df_dates, left_on='qty_needed', right_on='shipped_qty', Direction='forward')

关于python - 创建新列,其中日期对应于一个数量是否大于或等于另一个数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72901369/

相关文章:

python - 如何导航实例方法?

python - 如何存储不可散列的对象

python - Django @override_settings 不允许字典?

python - Pandas 从剪贴板读取不规则数据

python - 将特定列移至 DataFrame 的最右侧

python - 迭代数据帧并保存和恢复每一行

python - 如何将 Sqlalchemy 表对象转换为 Pandas DataFrame?

python - 将分类成绩数据(A+、B- 等)转化为数值

python - 有没有一种方法可以在不使用循环的情况下获取列表的每个元素?

python - 简化 if 语句 Python