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

基于Agent与时间范围匹配计算时间序列的均值及数据量

解决方法

首先需要确保所有日期列都是datetime类型,否则无法正确进行时间范围比较:

import pandas as pd

# 转换df1的日期列
df1['start_date'] = pd.to_datetime(df1['start_date'])
df1['end_date'] = pd.to_datetime(df1['end_date'])

# 转换df2的日期列
df2['datetime_log'] = pd.to_datetime(df2['datetime_log'])

方法一:合并+筛选+分组聚合(高效适合大数据量)

  1. 按Agent合并两个DataFrame,让df2的每条数据匹配到df1中对应Agent的时间范围
  2. 筛选出落在对应时间范围内的数据
  3. 按Agent分组计算均值和数据条数
  4. 将结果合并回df1,补全无数据Agent的计数为0
# 合并两个DataFrame
merged = pd.merge(df2, df1, on='Agent', how='right')

# 筛选符合时间范围的记录
filtered = merged[(merged['datetime_log'] >= merged['start_date']) & 
                  (merged['datetime_log'] <= merged['end_date'])]

# 分组计算统计值
agg_stats = filtered.groupby('Agent').agg(
    mean_df2=('value', 'mean'),
    count_df2=('value', 'count')
).reset_index()

# 合并回df1,填充缺失值
result = pd.merge(df1, agg_stats, on='Agent', how='left')
result['count_df2'] = result['count_df2'].fillna(0).astype(int)

方法二:逐行应用函数(直观易理解)

直接遍历df1的每一行,针对每个Agent和时间范围筛选df2的数据,计算统计值后合并回原表:

def get_agent_stats(row):
    # 筛选当前Agent且在时间范围内的数据
    agent_records = df2[(df2['Agent'] == row['Agent']) &
                        (df2['datetime_log'] >= row['start_date']) &
                        (df2['datetime_log'] <= row['end_date'])]
    # 返回均值和计数
    return pd.Series({
        'mean_df2': agent_records['value'].mean(),
        'count_df2': len(agent_records)
    })

# 应用函数到df1的每一行,合并结果
result = df1.join(df1.apply(get_agent_stats, axis=1))

两种方法最终都会得到目标结果:无匹配数据的Agent(如Sam)会显示mean_df2为NaN,count_df2为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:27:37