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

如何使用Pandas筛选所有分组中均存在的日期数据行

Pandas筛选所有分组均存在的日期行

需求说明

需要筛选出所有分组(group)中均存在的日期对应的行。例如日期2022-09-03在A、B、C、D所有分组中都存在,而2022-09-01缺少B分组的数据,因此不应保留。

原始DataFrame

import pandas as pd

data = [['A', '2022-09-01'], ['A', '2022-09-03'], ['A', '2022-09-07'], ['A', '2022-09-08'],
        ['B', '2022-09-03'], ['B', '2022-09-07'], ['B', '2022-09-08'], ['B', '2022-09-09'],
        ['C', '2022-09-01'], ['C', '2022-09-03'], ['C', '2022-09-07'], ['C', '2022-09-10'],
        ['D', '2022-09-01'], ['D', '2022-09-03'], ['D', '2022-09-05'], ['D', '2022-09-07']]
df = pd.DataFrame(data = data, columns = ['group', 'date'])

原始数据输出:

group        date
0      A  2022-09-01
1      A  2022-09-03
2      A  2022-09-07
3      A  2022-09-08
4      B  2022-09-03
5      B  2022-09-07
6      B  2022-09-08
7      B  2022-09-09
8      C  2022-09-01
9      C  2022-09-03
10     C  2022-09-07
11     C  2022-09-10
12     D  2022-09-01
13     D  2022-09-03
14     D  2022-09-05
15     D  2022-09-07

期望输出

data = [['A', '2022-09-03'], ['A', '2022-09-07'], ['B', '2022-09-03'], ['B', '2022-09-07'], 
        ['C', '2022-09-03'], ['C', '2022-09-07'], ['D', '2022-09-03'], ['D', '2022-09-07']]
df_desired = pd.DataFrame(data = data, columns = ['group', 'date'])

期望结果输出:

group        date
0     A  2022-09-03
1     A  2022-09-07
2     B  2022-09-03
3     B  2022-09-07
4     C  2022-09-03
5     C  2022-09-07
6     D  2022-09-03
7     D  2022-09-07

解决方案

核心思路是先找出所有分组都覆盖的日期,再用这些日期过滤原数据。具体实现代码如下:

# 计算总共有多少个不同的分组
total_groups = df['group'].nunique()

# 按日期分组,统计每个日期对应的分组数量,筛选出分组数等于总分组数的日期
valid_dates = df.groupby('date')['group'].nunique()[lambda x: x == total_groups].index

# 用符合条件的日期过滤原DataFrame
result = df[df['date'].isin(valid_dates)]

# 重置索引并查看结果
print(result.reset_index(drop=True))

代码解释

  • df['group'].nunique():获取数据中所有不同分组的数量(此处为4个:A、B、C、D)
  • groupby('date')['group'].nunique():按日期聚合,统计每个日期下出现的不同分组数
  • lambda x: x == total_groups:筛选出分组数等于总分组数的日期,这些日期就是所有分组都存在的日期
  • df['date'].isin(valid_dates):过滤原DataFrame,只保留日期在valid_dates中的行

运行上述代码后,输出结果与期望完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:32:09