有没有办法计算有多少条目存在与特定的过滤器为PythonPandas?

pu82cl6c  于 2022-12-09  发布在  Python
关注(0)|答案(1)|浏览(122)

这可能看起来很基本,但我是新的Pandas,标题可能不准确,但我有很好的截图下面这是一种投票应用程序
我有vote_results Dataframe :

立法者数据框:

这是我想要完成的 Dataframe :

支持的法案表示投赞成票反对的法案表示投反对票因此,我想知道每位立法者投赞成票(1)和反对票(2)的次数。我还需要加入立法者的 Dataframe ,以便包括立法者姓名
真的需要一些关于这方面的见解,以更好地了解我可以做什么与 Dataframe 在操纵方面。
我试着创建一些joins和group_by,但老实说,我处理得不是很好,我不能打印group_by,也不知道如何创建一个别名来计算按立法者ID分组的正面和负面投票

lpwwtiir

lpwwtiir1#

其逻辑是:

  • 按立法者ID连接两个 Dataframe
  • 按立法者标识分组
  • 支持票据和反对票据计数的合计
  • 立法者姓名是组中的第一个(或任意一个)
vote_results = pd.DataFrame(data=[[1,"L1","V1",1],[2,"L1","V2",1],[3,"L2","V3",0],[4,"L2","V4",0],[5,"L3","V5",1],[6,"L3","V6",0]], columns=["id","legislator_id","vote_id","vote_type"])

legislators = pd.DataFrame(data=[["L1","ABC"],["L2","PQR"],["L3","XYZ"]], columns=["id","name"])

result_df = legislators.merge(vote_results[["legislator_id","vote_id","vote_type"]], left_on="id", right_on="legislator_id", how="left") \
                       .groupby("id") \
                       .apply(lambda x: pd.Series({
                           "name": str(x["name"].iloc[0]),
                           "num_supported_bills": len([v for v in x.vote_type if v==1]),
                           "num_opposed_bills": len([v for v in x.vote_type if v==0]),
                           })) \
                       .reset_index()

输出量:

id name  num_supported_bills  num_opposed_bills
0  L1  ABC                    2                  0
1  L2  PQR                    0                  2
2  L3  XYZ                    1                  1

相关问题