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

如何使用pandas筛选拥有指定完整时间段数据的个体?

筛选指定时间段内有完整数据的个体

实现思路

你需要的不是单纯筛选时间段内的行,而是要确保每个个体的日期集合完全覆盖指定时间段的所有日期,同时排除那些起始日期晚于目标起始点、或结束日期早于目标结束点的个体。具体分以下几步操作:

代码实现

1. 导入库并处理原数据

首先将日期列转换为datetime类型(字符串无法正确进行日期比较和集合操作):

import pandas as pd

# 原数据集
df = pd.DataFrame({'names':['jim','jim','jim','jim','jim','jim','jim','jim','jim','jim',
                           'bob','bob','bob','bob','bob','bob',
                           'sara','sara','sara','sara','sara','sara','sara','sara','sara','sara'],
                  'dates':['01-01-19','01-02-19','01-03-19','01-04-19','01-05-19','01-06-19','01-07-19','01-08-19','01-09-19','01-10-19',
                           '01-05-19','01-06-19','01-07-19','01-08-19','01-09-19','01-10-19',
                           '01-01-19','01-02-19','01-03-19','01-04-19','01-05-19','01-06-19','01-07-19','01-08-19','01-09-19','01-10-19']})

# 转换日期格式为datetime(原格式是DD-MM-YY)
df['dates'] = pd.to_datetime(df['dates'], format='%d-%m-%y')

2. 定义目标时间段并生成完整日期范围

明确你要筛选的时间段,同时生成该时间段内的所有日期(作为“完整数据”的参照):

# 目标时间段的起始和结束日期
start_date = pd.to_datetime('2019-01-01')
end_date = pd.to_datetime('2019-01-10')

# 生成时间段内的所有日期(共10天)
full_date_range = pd.date_range(start=start_date, end=end_date)

3. 筛选符合条件的个体

按names分组,检查每个个体的日期集合是否包含完整的目标日期范围,再提取这些个体的所有数据:

# 筛选出日期覆盖完整时间段的个体
valid_names = df.groupby('names')['dates'].apply(
    lambda x: set(full_date_range).issubset(set(x))
)

# 获取最终筛选后的数据集
filtered_df = df[df['names'].isin(valid_names[valid_names].index)]

关键说明

  • 你提到的df[(df['dates'] >= "2019-01-01")&(df['dates'] <= "2019-01-10")]只能筛选出时间段内的行,但无法保证个体有完整的每日数据(比如bob的行都在该时间段内,但缺少前4天的数据)。
  • 如果需要严格保证每个个体每天恰好有一条数据(排除重复日期的情况),可以修改分组判断条件:
    valid_names = df.groupby('names')['dates'].apply(
        lambda x: len(set(x)) == len(full_date_range) and set(full_date_range).issubset(set(x))
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:34:56