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

如何在Pandas中统计每个用户的唯一双向配对联系人数量?

问题描述

我有一个包含student_login和reviewer_login两列的数据集,同一用户可同时作为学生和评审员。需要统计不区分角色的唯一配对数量(例如login_1与login_2、login_2与login_1视为同一配对),最终获取每个用户的唯一联系人数量。

示例数据集

student_loginreviewer_login
login_1login_2
login_2login_1
login_1login_3
login_2Login_3

预期结果

loginunique_contacts
login_12
login_22
login_32

请问是否有合适的Pandas函数可实现该需求?


解决方案

可以通过Pandas的组合操作实现,具体步骤如下:

  1. 统一大小写:先处理登录名的大小写差异(比如示例中的Login_3和login_3),确保匹配一致性
  2. 生成标准化配对:将每一行的两个登录名按字典序排序,让(login_1, login_2)和(login_2, login_1)转化为相同元组,实现配对去重
  3. 构建联系人关系:将去重后的配对展开,统计每个用户的唯一联系人数量

具体代码实现:

import pandas as pd

# 示例数据
data = {
    'student_login': ['login_1', 'login_2', 'login_1', 'login_2'],
    'reviewer_login': ['login_2', 'login_1', 'login_3', 'Login_3']
}
df = pd.DataFrame(data)

# 统一转为小写,消除大小写差异
df['student_login'] = df['student_login'].str.lower()
df['reviewer_login'] = df['reviewer_login'].str.lower()

# 生成标准化配对:按字典序排序每行的两个登录名
df['pair'] = df.apply(lambda row: tuple(sorted([row['student_login'], row['reviewer_login']])), axis=1)

# 去重配对,构建用户-联系人映射
unique_pairs = df['pair'].drop_duplicates()
contact_df = unique_pairs.explode().to_frame(name='login')
# 为每个用户匹配对应的联系人
contact_df['contact'] = unique_pairs.repeat(2).str[::-1].explode().values

# 统计每个用户的唯一联系人数量
result = contact_df.groupby('login')['contact'].nunique().reset_index(name='unique_contacts')

print(result)

运行代码后即可得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:54