首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Pandas和sqlite3

使用Pandas和sqlite3
EN

Stack Overflow用户
提问于 2016-11-13 16:45:42
回答 1查看 181关注 0票数 0

试着实施熊猫的privote_table,为每个党和每个州提供一个表格,显示党从国家收到的捐款总额。

这是正确的方法,还是我必须进入数据库,并被排挤出来。但是,下面的代码会出现错误。

代码语言:javascript
复制
party_and_state = candidates.merge(contributors, on='id')
party_and_state.pivot_table(df,index=["party","state"],values=["amount"],aggfunc=[np.sum])

预期的结果可能如下表所示。首先是州名,然后是D下面的党D是每个州的总票数,同样适用于R党

代码语言:javascript
复制
+-----------------+---------+--------+
|     state       | D       | R      |
+-----------------+---------+--------+
|      AK         | 500     | 900    |
|      IL         | 600     | 877    |
|      FL         | 200     | 400    |
|      UT         | 300     | 300    |
|      CA         | 109     | 90     |
|      MN         | 800     | 888    |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-14 02:45:14

考虑到广义熊猫与pd合并为限定符,而不是dataframe,因为联接字段的名称不同,因此需要left_on和right_on args。此外,如果将df作为数据文件的方法运行,则不要传入pivot_table,因为被调用的df被传递到函数中。

下面使用贡献者和contributors_with_candidates文本文件。此外,根据您想要的结果,您可能希望使用表格的arg值

代码语言:javascript
复制
import numpy as np
import pandas as pd

contributors = pd.read_table('contributors_with_candidate_id.txt', sep="|")
candidates = pd.read_table('candidates.txt', sep="|")

party_and_state = pd.merge(contributors, candidates, 
                           left_on=['candidate_id'], right_on=['id'])
party_and_state.pivot_table(index=["party", "state"],
                            values=["amount"], aggfunc=np.sum)    
#                amount
# party state          
# D     CA      1660.80
#       DC       200.09
#       FL      4250.00
#       IL       200.00
#       MA       195.00
# ...
# R     AK      1210.00
#       AR     14200.00
#       AZ       120.00
#       CA     -6674.53
#       CO     -5823.00

party_and_state.pivot_table(index=["state"], columns=["party"],
                            values=["amount"], aggfunc=np.sum)
#         amount          
# party        D         R
# state                   
# AK         NaN   1210.00
# AR         NaN  14200.00
# AZ         NaN    120.00
# CA     1660.80  -6674.53
# CO         NaN  -5823.00
# CT         NaN   2300.00

请注意,您可以在SQL和sql中将合并作为内部连接进行。

代码语言:javascript
复制
party_and_state = pd.read_sql("SELECT c.*, n.* FROM contributors c " +
                              "INNER JOIN candidates n ON c.candidate_id = n.id", 
                              con = db)

party_and_state.pivot_table(index=["state"], columns=["party"],
                            values=["amount"], aggfunc=np.sum)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40576316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档