试着实施熊猫的privote_table,为每个党和每个州提供一个表格,显示党从国家收到的捐款总额。
这是正确的方法,还是我必须进入数据库,并被排挤出来。但是,下面的代码会出现错误。
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党
+-----------------+---------+--------+
| state | D | R |
+-----------------+---------+--------+
| AK | 500 | 900 |
| IL | 600 | 877 |
| FL | 200 | 400 |
| UT | 300 | 300 |
| CA | 109 | 90 |
| MN | 800 | 888 |发布于 2016-11-14 02:45:14
考虑到广义熊猫与pd合并为限定符,而不是dataframe,因为联接字段的名称不同,因此需要left_on和right_on args。此外,如果将df作为数据文件的方法运行,则不要传入pivot_table,因为被调用的df被传递到函数中。
下面使用贡献者和contributors_with_candidates文本文件。此外,根据您想要的结果,您可能希望使用表格的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和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)https://stackoverflow.com/questions/40576316
复制相似问题