繁体   English   中英

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

[英]How to populate a column in one dataframe by comparing it to another dataframe

我有一个名为res_dfdataframe 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_dfres_df的摘要信息res_df 它是由分组GEOID列,然后利用聚合得到总结sum对的Bldg_Sq_Ftmean中的CensusPop每个唯一列GEOID 我们称之为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 S IN res_df匹配的是GEOID的在geoid_sum 我想使用公式填充该行的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)但似乎并没有工作(生产的全是假的布尔值)。 如何找到匹配项并应用函数填充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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM