[英]Python : How to populate a column value to new column in another dataframe on comparing other column?
[英]How to populate a column in one dataframe by comparing it to another dataframe
我有一个名为res_df
的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
由res_df
的摘要信息res_df
。 它是由分组GEOID
列,然后利用聚合得到总结sum
对的Bldg_Sq_Ft
和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
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.