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

如何使用Pandas基于唯一日期天数筛选并剔除记录?

解决方法:剔除唯一日期天数不足4天的subject_id记录

我明白你的需求啦——你要保留那些拥有至少4个唯一日期天数的subject_id的所有记录,剔除掉不符合条件的(比如subject_id=1只有3个唯一日期,要全删掉)。你之前的代码问题出在分组逻辑上,咱们一步步修正:

问题根源

你之前用groupby(['subject_id','day']),这是在统计每个subject在某一天的记录条数,而不是统计每个subject拥有多少个不同的日期,逻辑完全搞反了,所以得不到预期结果。

正确实现步骤

  1. 先统计每个subject_id对应的唯一日期天数
  2. 筛选出天数≥4的subject_id列表
  3. 用这个列表过滤原DataFrame,只保留符合条件的记录

完整代码

import pandas as pd

# 你的原始数据处理
df = pd.DataFrame({ 
    'subject_id':[1,1,1,1,1,1,1,2,2,2,2,2], 
    'time_1' :['2173-04-03 12:35:00','2173-04-03 12:50:00','2173-04-05 12:59:00','2173-05-04 13:14:00','2173-05-05 13:37:00','2173-07-03 13:39:00','2173-07-04 11:30:00','2173-04-04 16:00:00','2173-04-09 22:00:00','2173-04-11 04:00:00','2173-04-13 04:30:00','2173-04-14 08:00:00'], 
    'val' :[5,5,5,5,1,6,5,5,8,3,4,6]
})
df['time_1'] = pd.to_datetime(df['time_1'])
df['day'] = df['time_1'].dt.day
df['month'] = df['time_1'].dt.month

# 步骤1:统计每个subject的唯一日期天数
subject_unique_days = df.groupby('subject_id')['day'].nunique()

# 步骤2:筛选出符合条件的subject_id
valid_subjects = subject_unique_days[subject_unique_days >= 4].index

# 步骤3:过滤原DataFrame
filtered_df = df[df['subject_id'].isin(valid_subjects)]

# 查看结果
print(filtered_df)

运行结果

你会看到输出只保留了subject_id=2的所有记录,正好符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:15