SQL 使用 Python 按时间间隔加变量名分组

SQL group by time interval plus variable name using Python

我有两个数据框A和B,包含以下信息:

具有 4 个变量的日期框架 A: 姓名,start_date,end_date,ID

A.ID 是名称和 start_date 的串联。

具有 5 个变量的日期框架 B: 名称、日期、参数、值

我的目标是按以下方式汇总值:B.date 应介于 A.start_date 和 A.end_date 之间,A.name 应等于 B.name.请注意名称在数据框 A 中可以重复多次。日期是连续时间。例如从 start_date 到 end_date 以 1 小时为步长。

   SELECT A.ID, A.name,  B.parameter, AVG(value)
   FROM A
   JOIN B ON A.name = B.name
   GROUP BY parameter
   WHERE start_date < date < end_date
A = {'name': ['a', 'b', 'a', 'c'], 
     'start_date': ['01-01-2020', '01-01-2020', '10-01-2020', '15-01-2020'], 
     "end_date": ['05-01-2020', '06-01-2020', '15-01-2020', '20-01-2020'],
     'ID': ['a_01-01-2020', 'b_01-01-2020', 'a_10-01-2020', 'c_15-01-2020']}
B = {'name': ['a','a','b','b','a','a','c','c'], 
     'date': ['01-01-2020:00','01-01-2020:01', '01-01-2020:05','01-01-2020:06', '10-01-2020:12', '10-01-2020:13', '15-01-2020:00', '15-01-2020:01' ],
     'parameter': ['dog','dog','dog','dog','dog','dog','dog','cat'],
      'value': [10,20,20,30,1000,2000,50,100]}

最终数据框应该是:

C = {'ID': ['a_01-01-2020', 'b_01-01-2020', 'a_10-01-2020', 'c_15-01-2020','c_15-01-2020'],
    'name': ['a','b','a','c','c],
    'parameter': ['dog','dog','dog','dog','cat'],
    'value': [15,25,1500,50,100]}

WHERE 子句必须放在 GROUP BY 之前。另外,我认为日期检查应该固定如下:

SELECT A.ID, A.name,  B.parameter, AVG(value)
FROM A
JOIN B ON A.name = B.name
WHERE start_date < date AND date < end_date
GROUP BY parameter