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

基于df2的count值快速筛选df1对应行数的Pandas优化方法问询

高效提取Pandas DataFrame指定分组行数的方法

针对你用iterrows循环导致速度过慢的问题,推荐两种矢量化的高效实现方案,底层基于Pandas的C优化操作,能大幅提升处理速度:

方案一:合并后用cumcount筛选

通过合并获取每个分组的提取行数,再计算组内行号进行筛选:

# 合并df1与df2,将每个分组的count值关联到原始数据
df_merged = df1.merge(df2, on=['site_id', 'date', 'hour'], how='left')

# 按分组计算组内从0开始的行号
df_merged['row_num'] = df_merged.groupby(['site_id', 'date', 'hour']).cumcount()

# 筛选行号小于对应count的记录,最后清理临时字段
result = df_merged[df_merged['row_num'] < df_merged['count']].drop(columns=['row_num', 'count'])

方案二:分组映射+head()提取

先构建分组到提取行数的映射,再分组提取前N行:

# 将df2转换为分组元组到count值的字典
count_map = df2.set_index(['site_id', 'date', 'hour'])['count'].to_dict()

# 按分组提取对应行数,group_keys=False避免保留分组索引
result = df1.groupby(['site_id', 'date', 'hour'], group_keys=False).apply(
    lambda x: x.head(count_map.get(x.name, 0))
)

效率说明

这两种方案都避免了纯Python循环,利用Pandas的矢量化分组、合并操作,底层由C实现,在数据量较大时,效率比iterrows高几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:09:55