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

如何统计一个DataFrame中匹配另一个DataFrame键的对应数值?

解决方案

最优方案是用pandas内置的分组聚合+表关联逻辑,完全避免循环,性能比嵌套遍历高几个数量级。

步骤1:对df_b按key分组计算统计值

对df_b按keys字段分组,一次性统计每个key对应的数值总数、大于5的数值占比:

df_b_stats = df_b.groupby('keys').agg(
    total=('value', 'count'), # 统计每个key的记录总数
    gt5_ratio=('value', lambda x: (x>5).mean()) # 直接通过布尔值均值计算大于5的占比
).reset_index()

步骤2:把统计结果匹配到df_a中

用merge关联两个表的keys字段,保留df_a原有结构:

# 关联统计结果并重命名字段符合要求
df_a = df_a[['keys']].merge(df_b_stats, on='keys', how='left').rename(columns={'gt5_ratio': '>5'})

# 如果存在df_a有、df_b没有的key,需要填充默认值可加下面这行
# df_a = df_a.fillna({'total':0, '>5':0})

运行后得到的df_a完全符合预期输出要求。

原代码报错原因

之前的代码报错是因为iloc是按整数位置索引的接口,传入字符串'keys'属于非法参数;且嵌套循环的写法时间复杂度是O(n*m),数据量过万后性能会极差,不符合pandas的最佳实践。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:04