【问题标题】:Merging DataFrames on specific columns在特定列上合并 DataFrame
【发布时间】:2018-10-02 15:16:35
【问题描述】:

我有一个框架moviegoers,其中包括邮政编码但不包括城市。

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

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

我知道我需要的数据集 URL 是: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

任何想法将不胜感激。

【问题讨论】:

  • 不,您在哪里将数据集类型从系列更改为数据框。熊猫数据框的每一列都是熊猫系列。设置object就是将column的数据类型定义为字符串类型。

标签: python pandas merge


【解决方案1】:

我认为需要 map by Series 然后使用 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

【讨论】:

    【解决方案2】:

    只需 mergeZipcode 列上的两个数据集,然后运行 ​​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')
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 2020-06-15
      • 2018-06-15
      • 1970-01-01
      • 2022-11-20
      • 2017-04-29
      相关资源
      最近更新 更多