如何在dplyr中根据多列参与者数据创建新统计变量?
统计参与者总活动参与次数的最优实现方法
用Python的pandas库处理这类结构化数据集是效率最高的方案,具体步骤如下:
- 导入依赖库
import pandas as pd
- 加载或构造数据集
如果是本地已有数据,直接用pd.read_csv()等方法读取;针对你给出的示例数据,构造代码如下:
data = { 'Series': [1, 2, 3], 'event_1': ['Bill', 'Will', 'Stormy'], 'event_2': ['Alicia', 'Stormy', 'Dave'], 'event_3': ['Alicia', 'Bill', 'Sally'], 'event_4': ['Bill', 'Dob', 'Denise'], 'event_5': ['Denise', 'June', 'Alicia'], 'event_6': ['Bill', 'Denise', 'April'] } df = pd.DataFrame(data)
- 提取所有活动列并统计参与次数
用filter自动匹配所有以event_开头的列,再通过stack()把多列的参与者数据扁平化,最后用value_counts()统计总次数:
# 提取所有活动列 event_columns = df.filter(like='event_') # 统计每个参与者的总参与次数 participant_total_counts = event_columns.stack().value_counts()
运行后,打印participant_total_counts就能得到结果:
Bill 4 Alicia 3 Denise 3 Stormy 2 Will 1 Dob 1 June 1 Dave 1 Sally 1 April 1 dtype: int64
- 可选:将统计结果合并回原数据集
如果需要在原表格里直接显示每个参与者的总次数,可以用applymap批量替换单元格内容:
df[event_columns.columns] = event_columns.applymap(lambda name: f"{name} ({participant_total_counts[name]})")
处理后的数据集会变成:
Series event_1 event_2 event_3 event_4 event_5 event_6 0 1 Bill (4) Alicia (3) Alicia (3) Bill (4) Denise (3) Bill (4) 1 2 Will (1) Stormy (2) Bill (4) Dob (1) June (1) Denise (3) 2 3 Stormy (2) Dave (1) Sally (1) Denise (3) Alicia (3) April (1)
内容的提问来源于stack exchange,提问作者Maleeha Shahid
相关产品推荐
相关产品推荐

