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

Python 如何通过将列与另一个数据帧进行比较来填充一个数据帧中的列,python,pandas,dataframe,compare,pandas-groupby,Python,Pandas,Dataframe,Compare,Pandas Groupby,我有一个名为res_df的数据帧: 我用res_df中的总结信息制作了第二个数据帧。它按大地水准面列进行分组,然后使用聚合进行汇总,以获得建筑面积和每个唯一大地水准面的Censupop列的平均值。我们称之为geoid_sum: 我的目标是在res_df中找到与GEOID_sum中的GEOID相匹配的GEOID。我想使用一个公式填充该行的Pop_By_区域中的值: Pop_By_面积=大地水准面总和['censupop']*参考方向['Bldg_Sq_Ft']/大地水准面总和['Bldg_Sq_F

我有一个名为res_df的数据帧:

我用res_df中的总结信息制作了第二个数据帧。它按大地水准面列进行分组,然后使用聚合进行汇总,以获得建筑面积和每个唯一大地水准面的Censupop列的平均值。我们称之为geoid_sum:

我的目标是在res_df中找到与GEOID_sum中的GEOID相匹配的GEOID。我想使用一个公式填充该行的Pop_By_区域中的值:

Pop_By_面积=大地水准面总和['censupop']*参考方向['Bldg_Sq_Ft']/大地水准面总和['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
我曾尝试根据大地水准面匹配创建一个系列:s=res_df.GEOID.isingeoid_sum.GEOID.values,但这似乎不起作用,生成了所有错误的布尔值。如何找到匹配项并应用我的函数来填充Pop_By_Area列?

我想您需要重新索引


您需要在大地水准面上合并数据帧res_df和geoid_sum,并在合并的df上进行计算。合并文档:我认为这几乎可以实现,但我得到了一个错误:ValueError:“GEOID”既是索引级别又是列标签,这是不明确的。。此外,我假设我不需要大地水准面中的那些“\”,sumI只是将其更改为res_df['Pop_By_Area']=geoid_sum['censupop'].values*ref_df['Bldg_Sq_Ft']/geoid_sum['Bldg_Sq_Ft']。谢谢
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
def popByArea(census_pop_mean, bldg_sqft, bldg_sqft_sum):
    x = float()
    x = (census_pop_mean * bldg_sqft)/bldg_sqft_sum
    return x
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