[英]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
有一些重叠的广告系列,因此需要将那些重叠天数的“库存”相加。
最终结果应该是:
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.