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

如何在VAEX中按cid1和cid2分组筛选最小cval1值?

VAEX按分组保留最小cval1行的实现方法

问题场景

使用Vaex懒加载处理大CSV后,得到包含cid1(int)、cid2(int)、cval1(float)三列的DataFrame。每个cid1+cid2组合对应多行不同cval1的数据,需要仅保留每组中cval1最小的行。

已尝试的无效方法

  • 单组筛选:

    df = df.filter(df.cid1 == 36 & df.cid2 == 182 & df.cval1 == df.min(df.cval1))
    

    错误点:df.min(df.cval1)计算的是全局最小值而非分组最小值,且逻辑运算符优先级错误,未给==表达式加括号。

  • 循环预设组合筛选合并:

    df_finally = vaex.DataFrame()
    for x in cart_prod:
       df2 = df.filter(df.cid1 == x[0] & df.cid2 == x[1] & df.cval1 == df.min(df.cval1))
       df_finally = vaex.concat([df_finally, df2])
    

    错误点:同样使用全局最小值,且循环concat对大数据效率极低,不符合Vaex懒加载的设计思路。

  • 使用select方法:

    df.select(df.cid1 == x[0] & df.cid2 == x[1] & df.cval1 == df.min(df.cval1), name = "selection")
    

    错误点:select仅标记选中行,不会生成新DataFrame,需通过df[selection]获取结果。

  • 直接筛选组合:

    df = df.filter((df.cid1, df.cid2) in cart_prod)
    

    错误点:Vaex不支持该向量化条件写法,无法识别组合匹配。

正确解决方案

方法一:GroupBy+Join(通用高效)

利用Vaex的分组聚合+关联操作,全程懒加载,适合大数据场景:

import vaex

# 1. 按cid1、cid2分组,计算每组的最小cval1
grouped_df = df.groupby(['cid1', 'cid2'], agg={'min_cval1': vaex.agg.min('cval1')})

# 2. 将原DataFrame与分组结果关联,筛选出cval1等于分组最小值的行
result_df = df.join(grouped_df, on=['cid1', 'cid2'], how='inner')
result_df = result_df[result_df.cval1 == result_df.min_cval1]

# 可选:删除临时生成的min_cval1列
result_df = result_df.drop('min_cval1')

方法二:针对预设组合cart_prod的优化

如果仅需处理指定的cid1+cid2组合,可先筛选目标组合再执行分组逻辑:

from vaex import expr

# 构造目标组合的筛选条件
condition_list = [(df.cid1 == cid1_val) & (df.cid2 == cid2_val) for cid1_val, cid2_val in cart_prod]
filtered_df = df[expr.any(condition_list)]

# 后续执行分组+关联逻辑(同方法一)
grouped_filtered = filtered_df.groupby(['cid1', 'cid2'], agg={'min_cval1': vaex.agg.min('cval1')})
result_filtered_df = filtered_df.join(grouped_filtered, on=['cid1', 'cid2'], how='inner')
result_filtered_df = result_filtered_df[result_filtered_df.cval1 == result_filtered_df.min_cval1].drop('min_cval1')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:40:32