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

如何从活动-宾客列表中找出共同出席次数最多的宾客配对?

嘿,这个问题其实是数据领域里挺常见的关联统计需求,我给你梳理一套清晰的实操流程,不管你数据量多大都能落地:

第一步:先把数据转成「长格式」结构化数据

不管你原始数据是Excel表格、CSV还是其他格式,首先要整理成每行对应一个活动+一个宾客的结构。比如原来一个活动行里列了多个宾客,就得拆成多行——比如活动"年会"有John、Jane、Bob,就拆成3行:

年会 | John
年会 | Jane
年会 | Bob

这一步是后续所有统计的基础,避免机器处理时因为格式混乱出错。如果是Excel里的多列宾客,用「数据分列+逆透视」就能快速搞定。

第二步:为每个活动生成所有无序宾客配对

对每个活动里的宾客列表,生成所有无序配对组合(重点:John&Jane和Jane&John算同一组,不能重复计数)。比如刚才的年会,配对就是(John,Jane)、(John,Bob)、(Jane,Bob)。

这里如果手动做肯定不现实,用工具的话:

  • 用Python可以借助itertools.combinations函数,它专门生成不重复的两两组合;
  • 用SQL的话,可以通过自连接表来实现,记得加条件guest_id1 < guest_id2(用ID或者姓名排序)来避免重复配对。
第三步:统计每对的共同出席次数

把所有活动生成的配对汇总,统计每一组配对出现的次数——这就是他们共同出席的活动数。

给你两个常用工具的实现示例:

Python(适合大数据量)

import pandas as pd
from itertools import combinations

# 假设你的数据存在df里,列名是event(活动)和guest(宾客)
# 按活动分组,每组生成两两配对
pair_series = df.groupby('event')['guest'].apply(
    lambda guests: pd.Series(list(combinations(guests, 2)))
)
# 统计每对出现的次数
pair_counts = pair_series.value_counts().reset_index(name='共同出席次数')

SQL(适合数据库存储的大数据)

-- 假设表名为event_guests,字段是event_id, guest_id, guest_name
SELECT 
    g1.guest_name AS guest1,
    g2.guest_name AS guest2,
    COUNT(DISTINCT g1.event_id) AS 共同出席次数
FROM event_guests g1
JOIN event_guests g2 
    ON g1.event_id = g2.event_id 
    AND g1.guest_id < g2.guest_id  -- 避免重复配对
GROUP BY g1.guest_name, g2.guest_name
ORDER BY 共同出席次数 DESC;
第四步:筛选出次数最多的配对

统计完成后,找到「共同出席次数」的最大值,然后筛选出所有等于这个最大值的配对就行。如果有多个配对并列第一,都会被筛选出来。

针对超大规模数据的优化提示
  • 尽量用宾客ID代替姓名统计,避免同名同姓导致的统计错误;
  • 如果数据量超过10万行,Python里可以用Dask代替Pandas做并行处理,防止内存溢出;
  • 要是用Excel处理小数据量,可以用辅助列生成配对,再用COUNTIFS统计,但数据量大时效率极低,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:47:27