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

Python Pandas:高效筛选指定食品日前后5天的用餐记录

无循环高效实现方案

核心思路

利用Pandas的矢量化操作+合并分组替代循环,底层优化的内置函数能大幅提升1GB级数据集的处理效率。

步骤实现

  1. 统一日期格式
    先将两个DataFrame的日期列转换为datetime类型,确保时间计算准确:

    import pandas as pd
    
    # 转换日期列至datetime类型
    df_food_day['food_day_date'] = pd.to_datetime(df_food_day['food_day_date'])
    df_eating['meal_date'] = pd.to_datetime(df_eating['meal_date'])
    
  2. 按食品交叉合并
    以「食品」为关联键,将两个数据集合并,保留所有国际食品日的记录:

    merged_df = pd.merge(df_food_day, df_eating, on='food', how='left')
    
  3. 时间范围过滤
    筛选出用餐日期在国际食品日当天及之前5天内的记录:

    # 计算时间窗口并过滤
    time_window_start = merged_df['food_day_date'] - pd.Timedelta(days=5)
    merged_df = merged_df[merged_df['meal_date'].between(time_window_start, merged_df['food_day_date'])]
    
  4. 分组聚合人员列表
    按国际食品日的日期和食品分组,聚合出符合条件的人员列表(支持去重):

    # 聚合人员列表(默认保留所有记录)
    result = merged_df.groupby(['food_day_date', 'food'])['person'].agg(list).reset_index()
    
    # 若需去重(同一人多次食用的情况)
    result = merged_df.groupby(['food_day_date', 'food'])['person'].agg(lambda x: list(x.unique())).reset_index()
    

内存优化建议(针对1GB数据集)

如果内存紧张,可通过指定数据类型减少内存占用:

# 将字符串列转为category类型(类别有限时效果显著)
df_food_day['food'] = df_food_day['food'].astype('category')
df_eating['food'] = df_eating['food'].astype('category')
df_eating['person'] = df_eating['person'].astype('category')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:00:56