我有一个电影观众框架,其中包含邮政编码,但不包括城市。
然后我将 moviegoers 重新定义为 zipcodes ,并将邮政编码的数据类型更改为数据框而不是系列。
zipcodes = pd.read_csv('NYC1-moviegoers.csv',dtype={'zip_code': object})
我知道我需要的数据集网址是:https://raw.githubusercontent.com/mafudge/datasets/master/zipcodes/free-zipcode-database-Primary.csv。
我定义了一个数据框 zip_codes ,用于调用该数据集中的数据,并将数据集类型从系列更改为数据帧,因此其格式与 zipcodes 数据框相同。
我想合并数据框,以便我可以拥有电影观众数据。但是,我希望获得州名缩写,而不是 zipcodes 。这是我遇到问题的地方。
最终目标是计算每个州的电影观众人数。理想输出示例:
CA 116
MN 78
NY 60
TX 51
IL 50
非常感谢任何想法。
答案 0 :(得分:0)
我认为Series
需要map
,然后使用value_counts
来计算:
print (zipcodes)
zip_code
0 85711
1 94043
2 32067
3 43537
4 15213
s = zip_codes.set_index('Zipcode')['State']
df = zipcodes['zip_code'].map(s).value_counts().rename_axis('state').reset_index(name='count')
print (df.head())
state count
0 OH 1
1 CA 1
2 FL 1
3 AZ 1
4 PA 1
答案 1 :(得分:0)
只需merge
Zipcode 列上的两个数据集,然后运行groupby
进行状态计数。
# READ DATA FILES WITH RENAMING OF ZIP COLUMN IN FIRST
url = "https://raw.githubusercontent.com/mafudge/datasets/master/zipcodes/free-zipcode-database-Primary.csv"
moviegoers = pd.read_csv('NYC1-moviegoers.csv', dtype={'zip_code': object}).rename(columns={'zip_code': 'Zipcode'})
zipcodes = pd.read_csv(url, dtype={'Zipcode': object})
# MERGE ON COMMON FIELD
merged_df = pd.merge(moviegoers, zipcodes, on='Zipcode')
# AGGREGATE BY INDICATOR (STATE)
merged_df.groupby('State').size()
# ALTERNATIVE GROUP BY COUNT
merged_df.groupby('State')['Zipcode'].agg('count')