You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现SQL按时间区间+变量分组聚合 双DataFrame关联均值计算

Pandas 实现DataFrame按姓名+时间范围关联聚合均值

现有两个DataFrame A和B,字段信息如下:

  • DataFrame A包含4个字段:name、start_date、end_date、ID,其中A.ID为name和start_date的拼接值
  • DataFrame B包含4个字段:name、date、parameter、value

需求:对value按规则做均值聚合,关联条件为A.name与B.name相等,且B.date落在A.start_date和A.end_date的区间内。A中name可重复,B的date为步长1小时的连续时间。

参考SQL逻辑(修正了原SQL的GROUP BY字段遗漏问题):

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

完整实现代码

1. 导入依赖并构造测试数据

import pandas as pd

# 构造测试数据A
A = pd.DataFrame({
    '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
B = pd.DataFrame({
    '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]
})

2. 统一时间格式

# A的起止日期转datetime,结束日期加1天覆盖当日所有小时数据
A['start_date'] = pd.to_datetime(A['start_date'], format='%d-%m-%Y')
A['end_date'] = pd.to_datetime(A['end_date'], format='%d-%m-%Y') + pd.Timedelta(days=1)

# B的日期转datetime
B['date'] = pd.to_datetime(B['date'], format='%d-%m-%Y:%H')

3. 关联过滤+分组聚合

# 按name关联两表
merged = A.merge(B, on='name', how='inner')
# 过滤符合时间区间的行
filtered = merged[(merged['date'] >= merged['start_date']) & (merged['date'] < merged['end_date'])]
# 按ID、name、parameter分组求value均值
C = filtered.groupby(['ID', 'name', 'parameter'], as_index=False)['value'].mean()

输出结果

最终得到的C和预期完全一致:

IDnameparametervalue
a_01-01-2020adog15
a_10-01-2020adog1500
b_01-01-2020bdog25
c_15-01-2020cdog50
c_15-01-2020ccat100

内容的提问来源于stack exchange,提问作者TheAvenger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:45:03