繁体   English   中英

根据另一个数据框的日期范围将列值添加到数据框

[英]Add column values to a dataframe based on date range of another dataframe

我有 2 个数据框:

df1 与销售数据:

key | date       | sales
1   | 2020-10-16 | 100
1   | 2020-10-17 | 150
1   | 2020-10-19 | 180

2   | 2019-11-01 | 26
2   | 2019-11-02 | 27
2   | 2019-11-05 | 28

带有广告活动数据的 df2:

key | sale_start | sale_end   | stock
1   | 2020-10-16 | 2020-10-18 | 1000
1   | 2020-10-17 | 2020-10-20 | 1500
1   | 2020-10-20 | 2020-10-31 | 1800

2   | 2019-11-01 | 2019-11-03 | 260
2   | 2019-11-03 | 2019-11-05 | 270
2   | 2019-11-05 | 2019-11-15 | 280
  • 我需要将“df2”的“库存”编号放入“df1”,以便“df1”的每个销售日都将库存编号作为一列。
  • 那么我需要当天销售产品的百分比。

有一些重叠的广告系列,因此需要将那些重叠天数的“库存”相加。

最终结果应该是:

key | date       | sales | stock              | sales_stock_%
1   | 2020-10-16 | 100   | 1000               | 10
1   | 2020-10-17 | 150   | 2500 (1000 + 1500) | 6
1   | 2020-10-19 | 180   | 1500               | 12

2   | 2019-11-01 | 26    | 260                | 10
2   | 2019-11-02 | 27    | 260                | 10.38461538461538
2   | 2019-11-05 | 28    | 550 (270 + 280)    | 5.090909090909091

最后一列很简单,但如何将库存添加到 df1?

假设您仍然无法找到答案并更正@Paul Brennan 的评论:

for index, row in df1.iterrows():
    df1.at[index, "stock"]= df2[(df2["sale_start"] <= row["date"]) & (df2["sale_end"] >= row["date"])].sum()["stock"]
for index, row in df1.iterrows():
    df1.at[row.Index, 'stock'] = df2[(df2.sale_start <= row['date']) & (d2.sale_end >= row['date']).sum(axis=1).stock

对不起,这不是pythonic。 这是计划,对于每次销售,获取该销售的库存。 库存是在销售日期可用的所有库存的总和。

暂无
暂无

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

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