根据另一个数据框中的日期计算一个数据框的数量总和 (Python)

Calculating the sum of the quantities of one dataframe based on dates in another dataframe (Python)

假设我有一个这样的第一个 df:

df1:

 item     date1         date2
   1    2020-06-21    2020-06-28
   2    2020-05-13    2020-05-24
   3    2020-06-20    2020-06-28

我还有第二个 df (df2),其中包含项目、日期和数量

df2:

 item     quantity       date
   1         5        2020-06-24
   1         8        2020-06-20
   1         12       2020-06-27
   1         9        2020-06-29
   2         10       2020-05-24
   2         11       2020-05-15
   2         18       2020-05-18
   2         9        2020-05-14
   3         7        2020-06-18
   3         12       2020-06-21
   3         13       2020-06-24
   3         8        2020-06-28

现在我想对 df2 中的数量求和,其中日期在列 date1 和 date2 之间。 所以我的结果看起来像:

df3:

 item     date1         date2        sum
   1    2020-06-21    2020-06-28     17
   2    2020-05-13    2020-05-24     48
   3    2020-06-20    2020-06-28     33

我已经主演了一段时间了,我真的很想避免循环。

有没有一种有效的方法可以得到想要的结果??

df = df2.merge(df1, on = 'item', how = 'left')
df[['date', 'date1', 'date2']] = df[['date', 'date1', 'date2']].apply(pd.to_datetime)
df = df[ (df['date'] >=df['date1']) & (df['date'] <=df['date2'])]
df = df.groupby(['item','date1','date2']).agg({'quantity':'sum'}).reset_index()
  

输出:

   item  date1        date2    quantity
0   1   2020-06-21  2020-06-28  17
1   2   2020-05-13  2020-05-24  48
2   3   2020-06-20  2020-06-28  33