我有两个数据框。第一个包含一系列带有两个日期的 ID 号,第二个包含一系列带有事件日期的 ID 号。
import pandas as pd
df1 = pd.DataFrame({'id': ['19403', '59208', '45290'], 'date_1': ['2021-01-04', '2021-01-05', '2021-05-08'], 'date_2': ['2021-03-07', '2021-01-12', '2021-06-15']})
df2 = pd.DataFrame({'id': ['19403', '19403', '19403', '59208', '59208', '45290', '45290', '45290', '45290', '45290', '45290', '45290'], 'date': ['2021-01-05', '2021-02-12', '2021-03-17', '2021-01-06', '2021-01-08', '2021-03-14', '2021-03-17', '2021-05-09', '2021-05-12', '2021-05-23', '2021-06-01', '2021-08-14' ]})
我正在尝试合并两个数据帧,以便对于第一个数据帧中的每一行,它计算第二个事件的数量,其中日期在第一个数据帧的两个日期之间并且 ID 号匹配。
output = pd.DataFrame({'id': ['19403', '59208', '45290'], 'date_1': ['2021-01-04', '2021-01-05', '2021-05-08'], 'date_2': ['2021-03-07', '2021-01-12', '2021-06-15'], 'count': [2, 2, 4]})
我已经能够一次模拟一行(如下),但我正在努力将它应用于整个数据框。
count = df2[(df2['id'] == '19403') & (df2['date'].between('2021-01-04', '2021-03-07'))]['date'].count()
有什么建议么?我可能在这里遗漏了一些明显的东西。