Python 如何通过将列与另一个数据帧进行比较来填充一个数据帧中的列
我有一个名为res_df的数据帧: 我用res_df中的总结信息制作了第二个数据帧。它按大地水准面列进行分组,然后使用聚合进行汇总,以获得建筑面积和每个唯一大地水准面的Censupop列的平均值。我们称之为geoid_sum: 我的目标是在res_df中找到与GEOID_sum中的GEOID相匹配的GEOID。我想使用一个公式填充该行的Pop_By_区域中的值: Pop_By_面积=大地水准面总和['censupop']*参考方向['Bldg_Sq_Ft']/大地水准面总和['Bldg_Sq_Ft'] 我创建了一个接受这些参数的简单函数,但我不确定如何迭代数据帧并应用该函数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
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