基于Zipcode匹配为df1填充租金列:多值取均值单值直接取
正确实现方案
你的嵌套循环存在两个核心问题:
- 效率极低:df1有13万行,嵌套循环会产生巨量迭代次数,处理速度慢到离谱
- 赋值逻辑错误:
df1['rent'] = df2['rent']会把df2的rent列直接覆盖到df1,完全没实现按zipcode匹配对应值的需求
用Pandas的分组+合并可以高效解决你的需求,步骤如下:
1. 计算每个zipcode的租金均值
对df2按zipcodes分组,计算每组的rent均值——单条记录的均值就是它本身,多条记录的均值就是你要的平均值,刚好契合需求:
# 按zipcodes分组计算租金均值,得到每个zipcode对应的租金映射 zip_rent_map = df2.groupby('zipcodes')['rent'].mean().reset_index()
2. 将租金数据合并到df1
用左连接把计算好的租金均值匹配到df1的对应行,保留df1所有原始数据:
# 左连接:通过zipcodes列匹配,把rent列合并到df1 df1 = df1.merge(zip_rent_map, on='zipcodes', how='left')
可选:处理未匹配到的情况
如果df1里有df2不存在的zipcode,合并后对应的rent会是NaN,你可以根据需求填充默认值,比如:
# 把未匹配到的rent填充为0(也可以换成其他合理值) df1['rent'] = df1['rent'].fillna(0)
这个方法完全利用Pandas的向量化操作,处理13万行数据速度极快,逻辑也精准符合你的需求。
内容的提问来源于stack exchange,提问作者R_Sengupta
相关产品推荐
相关产品推荐

