合并特定列

时间:2018-04-22 13:32:18

标签: python pandas merge

我有一个电影观众框架,其中包含邮政编码,但不包括城市。

Image of moviegoers output.

然后我将 moviegoers 重新定义为 zipcodes ,并将邮政编码的数据类型更改为数据框而不是系列。

 zipcodes = pd.read_csv('NYC1-moviegoers.csv',dtype={'zip_code': object})

Image of zipcodes output.

我知道我需要的数据集网址是:https://raw.githubusercontent.com/mafudge/datasets/master/zipcodes/free-zipcode-database-Primary.csv

我定义了一个数据框 zip_codes ,用于调用该数据集中的数据,并将数据集类型从系列更改为数据帧,因此其格式与 zipcodes 数据框相同。

Image of zip_codes data frame output.

我想合并数据框,以便我可以拥有电影观众数据。但是,我希望获得州名缩写,而不是 zipcodes 。这是我遇到问题的地方。

最终目标是计算每个州的电影观众人数。理想输出示例:

CA    116
MN     78
NY     60
TX     51
IL     50

非常感谢任何想法。

2 个答案:

答案 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')