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

如何用Pandas统计存在指定向量组合的item_id数量

解决方案

步骤1:预处理向量集合,提升查询效率

因为要频繁检查向量是否存在,先把df2的vectors列转成集合——集合的成员查询是O(1)复杂度,比直接查DataFrame快得多:

import pandas as pd
from itertools import product

# 初始化原始数据
df1 = pd.DataFrame({'item_id':['1','1','1','2','2','2','3','3'],'nodes':['a','b','c','d','a','e','f','g']})
df2 = pd.DataFrame({'vectors':[('a','b'),('b','c'),('d','f'),('e','b')]})

# 转换为集合
vector_set = set(df2['vectors'])

步骤2:按item_id分组验证条件

对df1按item_id分组,给每个item生成所有节点的有序笛卡尔积,再检查是否有积存在于向量集合中:

qualified_items = []
for item_id, group in df1.groupby('item_id'):
    nodes = group['nodes'].tolist()
    # 生成所有有序笛卡尔积(包含节点自身组合,如(a,a))
    all_vectors = product(nodes, nodes)
    # 只要有一个向量匹配就标记该item符合条件
    has_match = any(vec in vector_set for vec in all_vectors)
    if has_match:
        qualified_items.append(item_id)

步骤3:统计符合条件的item数量

直接取合格item列表的长度即可得到结果:

count = len(qualified_items)
print(f"符合条件的item_id数量:{count}")  # 输出结果为1,仅item_id=1符合要求

简化写法(用apply批量处理)

如果想更简洁,可以结合groupby和apply实现一行式分组验证:

def check_item(group):
    nodes = group['nodes'].tolist()
    return any(vec in vector_set for vec in product(nodes, nodes))

# 分组验证后求和,得到符合条件的item数量
count = df1.groupby('item_id').apply(check_item).sum()
print(f"符合条件的item_id数量:{count}")

补充说明

如果需求要求有序向量不包含节点自身组合(如(a,a)),只需修改判断逻辑:

has_match = any(vec in vector_set for vec in product(nodes, nodes) if vec[0] != vec[1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:32:25