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

Pandas DataFrame分组后按组规模规则删除指定行

解决方案

可以通过Pandas的矢量化分组操作实现,避免循环遍历每个组,保证处理大数据集时的效率:

核心思路

  1. 计算每个分组的行数,关联到每一行;
  2. 用组内正向/反向计数标记每行在组内的位置;
  3. 根据组大小和行位置构建过滤条件,筛选需要保留的行。

代码实现

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'group_col': ['A', 'A', 'A', 'B', 'B', 'C'],
    'value': [1, 2, 3, 4, 5, 6]
})

n = 3  # 自定义阈值

# 1. 计算每个行所属分组的大小
group_size = df.groupby('group_col')['group_col'].transform('size')
# 2. 组内正向索引(从0开始,第一行索引为0)
cum_count = df.groupby('group_col').cumcount()
# 3. 组内反向索引(从0开始,最后一行索引为0)
cum_count_rev = df.groupby('group_col').cumcount(ascending=False)

# 构建过滤掩码:符合条件的行保留
mask = (
    # 分组行数 <n:保留除第一行外的所有行
    ((group_size < n) & (cum_count != 0)) |
    # 分组行数 >=n:保留除第一行和最后一行外的所有行
    ((group_size >= n) & (cum_count != 0) & (cum_count_rev != 0))
)

# 得到最终结果
result_df = df[mask]

关键说明

  • 所有操作都是Pandas内置的矢量化方法,比apply循环遍历分组的效率高一个数量级,适合处理百万级以上的数据集;
  • 如果需要按多列分组,只需将groupby('group_col')改为groupby(['col1', 'col2'])即可;
  • 阈值n可根据需求自定义,无需修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:27:14