如何使用Pandas基于唯一日期天数筛选并剔除记录?
解决方法:剔除唯一日期天数不足4天的subject_id记录
我明白你的需求啦——你要保留那些拥有至少4个唯一日期天数的subject_id的所有记录,剔除掉不符合条件的(比如subject_id=1只有3个唯一日期,要全删掉)。你之前的代码问题出在分组逻辑上,咱们一步步修正:
问题根源
你之前用groupby(['subject_id','day']),这是在统计每个subject在某一天的记录条数,而不是统计每个subject拥有多少个不同的日期,逻辑完全搞反了,所以得不到预期结果。
正确实现步骤
- 先统计每个
subject_id对应的唯一日期天数 - 筛选出天数≥4的
subject_id列表 - 用这个列表过滤原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
相关产品推荐
相关产品推荐

