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

如何在Pandas中以列值为参数实现分组后指定行数筛选?

按分组保留指定行数的DataFrame处理方案

需求与原始数据

原始DataFrame:

ABC
tr1
tr1
nj2
nj2
nj2

需按A、B列分组,每个组保留的行数等于该组内C列的数值(组内C值一致),期望输出:

ABC
tr1
nj2
nj2

此前尝试的代码未成功:

df.groupby(['A', 'B']).agg(lambda x: x.head(df.C))

正确实现方法

方法1:groupby + apply

利用组内C值一致的特点,取组内第一个C值作为保留行数:

df.groupby(['A', 'B'], group_keys=False).apply(lambda group: group.head(group['C'].iloc[0]))

方法2:transform生成行号筛选

通过生成组内行号,再筛选行号不超过C值的行,性能更适合大数据集:

# 生成每个组内的行号(从1开始)
df['group_row_idx'] = df.groupby(['A', 'B']).cumcount() + 1
# 筛选符合条件的行并移除辅助列
result_df = df[df['group_row_idx'] <= df['C']].drop('group_row_idx', axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:31:09