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

如何用Python Pandas统计议员赞成反对票数并关联议员信息

解决方案步骤

1. 统计每位议员的赞成/反对票数

先处理vote_results,按legislator_id分组后,用agg()方法分别统计赞成票(vote=1)和反对票(vote=2)的次数,同时给统计结果设置别名:

# 统计赞成和反对票
vote_counts = vote_results.groupby('legislator_id').agg(
    supported_bills=('vote', lambda x: (x == 1).sum()),
    opposed_bills=('vote', lambda x: (x == 2).sum())
).reset_index()

关键说明:

  • groupby('legislator_id')返回的是GroupBy对象,不是直接的统计结果,所以你之前看不到数据——必须调用聚合函数(比如agg())才能生成结构化的DataFrame。
  • agg()的参数是键值对:键就是你想要的列别名(比如supported_bills),值是聚合逻辑——用lambda表达式筛选出对应vote值的行,再通过sum()统计数量(布尔值True等价于1,False等价于0,求和就是计数)。
  • reset_index()把分组用的legislator_id从索引变回普通列,方便后续和议员表关联。

2. 关联议员姓名

用merge()把统计结果和legislators表按legislator_id匹配,获取议员姓名:

# 关联议员姓名(假设legislators中的姓名列名为name)
final_result = vote_counts.merge(
    legislators[['legislator_id', 'name']],  # 只保留需要的列,减少冗余数据
    on='legislator_id',
    how='left'  # 保留所有有投票记录的议员,即使议员表中无对应数据
)

可选调整:

如果只需要两边都存在的议员数据,把how='left'改成how='inner'即可。

3. 查看最终结果

直接打印或调用head()查看数据:

print(final_result)
# 或者查看前5行数据
print(final_result.head())

补充:更简洁的统计方式

如果只是简单计数,也可以用crosstab生成交叉表后重命名列:

import pandas as pd

vote_counts = pd.crosstab(
    vote_results['legislator_id'],
    vote_results['vote']
).rename(columns={1: 'supported_bills', 2: 'opposed_bills'}).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:30:39