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

如何基于分组结果筛选含多个重复日期的Category所有行?

Pandas筛选含多个重复日期的类别行方案

原始数据

首先定义问题中的DataFrame:

import pandas as pd
data= [['A','2022-07-01',3],['A','2022-07-01',4],['A','2022-07-01',5],['A','2022-07-02',5],['A','2022-07-03',6],['A','2022-07-03',2],['B','2022-07-01',3],['B','2022-07-01',4],['B','2022-07-02',5],['B','2022-07-02',6],['B','2022-07-03',2],['C','2022-07-01',3],['C','2022-07-02',4],['C','2022-07-02',5],['C','2022-07-03',6],['C','2022-07-04',2]]
df = pd.DataFrame(data,columns =['category','date','Value'])

需求说明

需要筛选出所属category中存在至少两个不同日期对应多条记录的所有行:

  • Category A:2022-07-01(3条)、2022-07-03(2条),符合条件
  • Category B:2022-07-01(2条)、2022-07-02(2条),符合条件
  • Category C:仅2022-07-02有重复记录,不符合条件需排除

解决方案

通过多轮分组统计锁定符合条件的类别,再筛选原始数据:

分步实现

  1. 统计每个(category, date)组合的记录数:
date_group_counts = df.groupby(['category', 'date']).size().reset_index(name='record_num')
  1. 筛选出记录数大于1的(category, date)组合(即该类别下的重复日期):
duplicate_date_groups = date_group_counts[date_group_counts['record_num'] > 1]
  1. 统计每个category下有多少个这样的重复日期:
cat_duplicate_date_count = duplicate_date_groups.groupby('category').size().reset_index(name='dup_date_count')
  1. 筛选出重复日期数量≥2的category:
valid_categories = cat_duplicate_date_count[cat_duplicate_date_count['dup_date_count'] >= 2]['category']
  1. 用符合条件的category筛选原始DataFrame:
final_result = df[df['category'].isin(valid_categories)]

链式简化版

可以把上述步骤合并为一行链式操作,更简洁:

final_result = df[
    df['category'].isin(
        df.groupby(['category', 'date'])
          .size()
          .loc[lambda x: x > 1]
          .reset_index()
          .groupby('category')
          .size()
          .loc[lambda x: x >= 2]
          .index
    )
]

结果验证

打印final_result会得到Category A和B的所有行,Category C的行被排除,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:07:26