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

如何基于含活动起止时间的DataFrame统计指定地点指定日期的活动数

高效解决活动数量统计问题

问题回顾

现有包含event_id、location_id、start_date、end_date的DataFrame,需统计指定时间T和地点X下正在进行的活动数量。

快速解决方案

第一步:统一日期格式

先确保日期列是datetime类型,避免字符串匹配的问题:

import pandas as pd

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

方法1:单次查询(即时计算)

如果只是偶尔查询单个时间和地点,直接用布尔过滤统计,效率最高:

def get_active_count(df, target_time, target_loc):
    target_time = pd.to_datetime(target_time)
    # 筛选地点匹配、且时间落在活动区间内的记录
    match = (df['location_id'] == target_loc) & \
            (df['start_date'] <= target_time) & \
            (df['end_date'] >= target_time)
    return match.sum()

# 示例调用:查询2022-05-04、地点2的活动数
get_active_count(df, '2022-05-04', 2)  # 返回3

方法2:批量查询(预计算)

如果需要频繁查询多个时间点,预先生成所有日期-地点组合的统计结果,后续查询直接索引:

# 1. 生成所有要覆盖的日期范围和唯一地点
all_locs = df['location_id'].unique()
min_dt = df['start_date'].min()
max_dt = df['end_date'].max()
all_dates = pd.date_range(min_dt, max_dt)

# 2. 生成日期-地点的笛卡尔积
date_loc_pairs = pd.MultiIndex.from_product(
    [all_dates, all_locs],
    names=['query_date', 'location_id']
).to_frame(index=False)

# 3. 用区间索引高效统计每个组合的活动数
# 先按地点分组,创建每个地点的活动时间区间集合
loc_intervals = df.groupby('location_id').apply(
    lambda g: pd.IntervalIndex.from_arrays(g['start_date'], g['end_date'], closed='both')
)

# 统计每个日期-地点的匹配区间数
def count_active(row):
    intervals = loc_intervals.get(row['location_id'], pd.IntervalIndex([]))
    return intervals.contains(row['query_date']).sum()

date_loc_pairs['active_count'] = date_loc_pairs.apply(count_active, axis=1)

# 示例查询:直接筛选
result = date_loc_pairs[
    (date_loc_pairs['query_date'] == '2022-05-04') & 
    (date_loc_pairs['location_id'] == 2)
]['active_count'].iloc[0]

为什么你的尝试有问题?

  • iterrows()是逐行遍历,在数据量大时速度极慢,完全没必要用,pandas的矢量化操作(布尔过滤、区间索引)都是底层优化过的,效率高几个数量级。
  • 生成每个地点的日期数组时,用MultiIndex.from_product就能直接生成日期-地点的笛卡尔积,不用手动重复location_id,这一步可以直接解决你之前卡住的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:40:42