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

Pandas Edgelist处理:统计两两组合在指定列的共同值数量

实现步骤及代码

首先导入依赖库并构造原始数据表:

import pandas as pd
import itertools

# 构造原始数据
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Clyde', 'Dave', 'Alice', 'Bob'],
    'Pet': ['Dog', 'Dog', 'Horse', 'Dog', 'Cat', 'Cat']
})

接下来获取每个用户对应的宠物集合,方便后续快速计算交集:

# 按用户分组,将每个用户的宠物转为集合存储
user_pet_map = df.groupby('Name')['Pet'].apply(set).to_dict()
all_users = user_pet_map.keys()

生成所有不重复的两两用户组合,计算共同宠物数量并格式化输出字段:

result = []
# itertools.combinations 会自动生成无重复的两两组合,不会出现(A,B)和(B,A)重复、以及用户和自己配对的情况
for name1, name2 in itertools.combinations(all_users, 2):
    common_pets = user_pet_map[name1] & user_pet_map[name2]
    common_count = len(common_pets)
    # 按要求格式化Pet字段
    if common_count >= 2:
        pet_desc = f"{common_count}(双方都拥有{'、'.join(common_pets)})"
    else:
        pet_desc = str(common_count)
    result.append({
        'Name1': name1,
        'Name2': name2,
        'Pet': pet_desc
    })

# 转为DataFrame查看结果
result_df = pd.DataFrame(result)
print(result_df)
输出结果验证

运行代码得到的结果和需求完全匹配:

Name1Name2Pet
AliceBob2(双方都拥有Dog、Cat)
AliceClyde0
AliceDave1
BobClyde0
BobDave1
ClydeDave0

如果需要把宠物名替换为中文,直接在构造原始数据时修改对应值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:05