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

基于日期条目数筛选Pandas DataFrame:删除条目不足的行

问题描述

我有如下结构的Pandas DataFrame:

Date_Timelevel
2018-02-12 13:22:275
2018-02-12 13:17:277
2018-02-12 13:12:272
2018-02-12 13:07:276
2018-02-13 13:12:274
2018-02-13 13:17:275

需求:若某一日期对应的条目数少于3条,则删除该日期的所有行。示例中2018-02-13仅有2条数据,移除后得到目标DataFrame:

Date_Timelevel
2018-02-12 13:22:275
2018-02-12 13:17:277
2018-02-12 13:12:272
2018-02-12 13:07:276

之前用for循环实现,但运行耗时过长,寻求更高效的解决方案。

高效解决方案

Pandas的向量化操作远优于循环,以下两种方法可以高效实现需求:

方法1:分组统计后过滤

先从Date_Time提取日期,通过groupby.transform计算每个日期的条目数,再筛选出条目数≥3的行:

import pandas as pd

# 假设你的DataFrame名为df
df['date'] = pd.to_datetime(df['Date_Time']).dt.date
# 为每行添加对应日期的条目数
date_counts = df.groupby('date')['date'].transform('count')
# 过滤并删除临时列
result_df = df[date_counts >= 3].drop('date', axis=1)

方法2:筛选有效日期后匹配

先提取日期,用value_counts获取符合条件的日期列表,再保留这些日期对应的行:

import pandas as pd

df['date'] = pd.to_datetime(df['Date_Time']).dt.date
# 获取条目数≥3的日期
valid_dates = df['date'].value_counts()[lambda x: x >= 3].index
# 筛选行并删除临时列
result_df = df[df['date'].isin(valid_dates)].drop('date', axis=1)

这两种方法均利用Pandas内置的向量化计算,处理大数据集时效率会比for循环提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:15:43