使用 Pandas 和 sqlite3
Using Pandas and sqlite3
尝试实施 pandas 的 privote_table,为每个政党和每个州生成一个 table,显示该党从该州获得的总捐款数额。
这是正确的做法吗,还是我必须进入数据库并被感染。但是下面的代码给出了错误。
party_and_state = candidates.merge(contributors, on='id')
party_and_state.pivot_table(df,index=["party","state"],values=["amount"],aggfunc=[np.sum])
预期结果可能类似于下面的 table。
第一列是州名,D党下面的D党是各州的总票数,R
党同理
+-----------------+---------+--------+
| state | D | R |
+-----------------+---------+--------+
| AK | 500 | 900 |
| IL | 600 | 877 |
| FL | 200 | 400 |
| UT | 300 | 300 |
| CA | 109 | 90 |
| MN | 800 | 888 |
考虑将广义的 pandas 与 pd
合并作为限定符而不是数据框,因为连接字段的名称不同,因此需要 left_on和 right_on 参数。此外,不要将 df
if 运行 pivot_table
作为数据框的方法传入,因为被调用的 df 已传递到函数中。
下面使用 贡献者 和 contributors_with_candidates 文本文件。此外,根据您想要的结果,您可能希望使用 pivot_table:
的 values arg
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 中的内部联接与 read_sql:
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)
尝试实施 pandas 的 privote_table,为每个政党和每个州生成一个 table,显示该党从该州获得的总捐款数额。
这是正确的做法吗,还是我必须进入数据库并被感染。但是下面的代码给出了错误。
party_and_state = candidates.merge(contributors, on='id')
party_and_state.pivot_table(df,index=["party","state"],values=["amount"],aggfunc=[np.sum])
预期结果可能类似于下面的 table。 第一列是州名,D党下面的D党是各州的总票数,R
党同理+-----------------+---------+--------+
| state | D | R |
+-----------------+---------+--------+
| AK | 500 | 900 |
| IL | 600 | 877 |
| FL | 200 | 400 |
| UT | 300 | 300 |
| CA | 109 | 90 |
| MN | 800 | 888 |
考虑将广义的 pandas 与 pd
合并作为限定符而不是数据框,因为连接字段的名称不同,因此需要 left_on和 right_on 参数。此外,不要将 df
if 运行 pivot_table
作为数据框的方法传入,因为被调用的 df 已传递到函数中。
下面使用 贡献者 和 contributors_with_candidates 文本文件。此外,根据您想要的结果,您可能希望使用 pivot_table:
的 values argimport 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 中的内部联接与 read_sql:
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)