如何通过将其与另一个数据框架进行比较来填充一个数据框中的列



我有一个 dataframe称为 res_df

In [54]: res_df.head()
Out[54]:       
       Bldg_Sq_Ft        GEOID       CensusPop  HU_Pop  Pop_By_Area
0     753.026123  240010013002022       11.0     7.0          NaN
7      95.890495  240430003022003       17.0     8.0          NaN
8    1940.862793  240430003022021       86.0    33.0          NaN
24   2254.519775  245102801012021       27.0    13.0          NaN
25  11685.613281  245101503002000      152.0    74.0          NaN

我在res_df中的汇总信息中有第二个数据帧。它由GEOID列分组,然后使用聚合以获取每个唯一GEOIDBldg_Sq_FtsumCensusPop列的mean。我们称其为 geoid_sum

In [55]:geoid_sum = geoid_sum.groupby('GEOID').agg({'GEOID': 'count', 'Bldg_Sq_Ft': 'sum', 'CensusPop': 'mean'})
In [56]: geoid_sum.head()
Out[56]: 
                      GEOID    Bldg_Sq_Ft  CensusPop
    GEOID                                          
    100010431001011      1   1154.915527        0.0
    100030144041044      1   5443.207520       26.0
    100050519001066      1   1164.390503        4.0
    240010001001001     15  30923.517090       41.0
    240010001001007      3   6651.656677        0.0

我的目标是在geoid_sum中匹配GEOID s的GEOID中找到CC_11 s。我想使用公式在该行中填充Pop_By_Area中的值:

Pop_By_Area = (geoid_sum['CensusPop'] * ref_df['Bldg_Sq_Ft'])/geoid_sum['Bldg_Sq_Ft']

我已经创建了一个简单的功能,可以采用这些参数,但是我不确定如何通过数据范围迭代并应用功能。

def popByArea(census_pop_mean, bldg_sqft, bldg_sqft_sum):
    x = float()
    x = (census_pop_mean * bldg_sqft)/bldg_sqft_sum
    return x

我尝试过基于GEOID匹配的系列:s = res_df.GEOID.isin(geoid_sum.GEOID.values),但这似乎不起作用(产生了所有False Boolean值(。我如何找到匹配项并应用我的功能以填充Pop_By_Area列?

我认为您需要reindex

geoid_sum = geoid_sum.groupby('GEOID').
              agg({'GEOID': 'count', 'Bldg_Sq_Ft': 'sum', 'CensusPop': 'mean'}).
               reindex(res_df['GEOID'])

res_df['Pop_By_Area'] = (geoid_sum['CensusPop'].values * ref_df['Bldg_Sq_Ft'])/geoid_sum['Bldg_Sq_Ft'].values

相关内容

  • 没有找到相关文章

最新更新