如何在Pandas中统计每个用户的唯一双向配对联系人数量?
问题描述
我有一个包含student_login和reviewer_login两列的数据集,同一用户可同时作为学生和评审员。需要统计不区分角色的唯一配对数量(例如login_1与login_2、login_2与login_1视为同一配对),最终获取每个用户的唯一联系人数量。
示例数据集
| student_login | reviewer_login |
|---|---|
| login_1 | login_2 |
| login_2 | login_1 |
| login_1 | login_3 |
| login_2 | Login_3 |
预期结果
| login | unique_contacts |
|---|---|
| login_1 | 2 |
| login_2 | 2 |
| login_3 | 2 |
请问是否有合适的Pandas函数可实现该需求?
解决方案
可以通过Pandas的组合操作实现,具体步骤如下:
- 统一大小写:先处理登录名的大小写差异(比如示例中的
Login_3和login_3),确保匹配一致性 - 生成标准化配对:将每一行的两个登录名按字典序排序,让
(login_1, login_2)和(login_2, login_1)转化为相同元组,实现配对去重 - 构建联系人关系:将去重后的配对展开,统计每个用户的唯一联系人数量
具体代码实现:
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
相关产品推荐
相关产品推荐

