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

时间:2019-06-25 02:25:39

标签: python pandas dataframe compare pandas-groupby

我有一个叫dataframe的{​​{1}}:

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的{​​{1}}和sum列的Bldg_Sq_Ft 1}}。我们称之为mean

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。我想使用公式填充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 列?

1 个答案:

答案 0 :(得分:1)

我认为您需要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