如何聚合多记录数据集并创建votecount、party loyalty新变量?
解决方案:聚合投票数据集
代码实现(Python Pandas)
import pandas as pd # 构造原始数据集(实际使用时可替换为读取本地文件/数据库) data = { '姓名': ['John', 'John', 'John', 'John', 'John', 'John', 'Tim', 'Tim', 'Tim', 'Tim'], '会话': [114, 114, 114, 115, 116, 116, 114, 115, 115, 116], '个人投票': ['yea', 'yea', 'nay', 'yea', 'yea', 'yea', 'nay', 'nay', 'nay', 'yea'], '政党投票': ['nay', 'yea', 'nay', 'yea', 'nay', 'yea', 'yea', 'yea', 'nay', 'nay'], '与政党投票一致?': ['no', 'yes', 'yes', 'yes', 'no', 'yes', 'no', 'no', 'yes', 'no'] } df = pd.DataFrame(data) # 按「姓名」和「会话」分组,计算聚合指标 aggregated_df = df.groupby(['姓名', '会话']).agg( votecount=('与政党投票一致?', 'count'), # 统计每组投票总数 # 计算政党忠诚度:一致的投票数/总投票数,保留两位小数 party_loyalty=('与政党投票一致?', lambda x: round(sum(x == 'yes') / len(x), 2)) ).reset_index() # 重命名列以匹配目标格式 aggregated_df = aggregated_df.rename(columns={'party_loyalty': 'party loyalty'}) print(aggregated_df)
输出结果
| 姓名 | 会话 | votecount | party loyalty |
|---|---|---|---|
| John | 114 | 3 | 0.67 |
| John | 115 | 1 | 1.00 |
| John | 116 | 2 | 0.50 |
| Tim | 114 | 1 | 0.00 |
| Tim | 115 | 2 | 0.50 |
| Tim | 116 | 1 | 0.00 |
关键步骤说明
- 分组:通过
groupby(['姓名', '会话'])将数据按参与者和会话维度拆分 - 投票总数:用
count方法直接统计每组的记录条数,得到votecount - 政党忠诚度:通过lambda函数计算每组中"与政党投票一致?"为
yes的比例,用round保留两位小数 - 重置索引:
reset_index()将分组后的索引转换为普通列,确保结果格式符合要求
内容的提问来源于stack exchange,提问作者lwe
相关产品推荐
相关产品推荐

