You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中为州/城市序列匹配邮编并处理字典遍历重复输出

解决方法:用Pandas矢量化操作匹配州/城市的邮政编码

我来帮你搞定这个问题!你之前用临时变量更新的思路其实方向没错,但手动循环很容易踩边界坑,而且Pandas本身就有更高效的矢量化方法来处理这种"分组填充"的需求,完全不用遍历字典~

先拿模拟数据举个例子,方便你对应到自己的真实数据:

import pandas as pd

# 模拟你的地点Series:州名开头,后面跟着该州的城市
places = pd.Series([
    'California', 'Los Angeles', 'San Francisco',
    'Texas', 'Houston', 'Austin',
    'New York', 'New York City', 'Buffalo'
])

# 模拟你的州转邮政编码字典
state_to_zip = {
    'California': '90001',
    'Texas': '77001',
    'New York': '10001'
}

接下来分三步实现需求:

1. 标记出所有州名行

先识别出Series里哪些元素是州名(也就是存在于你的字典keys里):

# 生成布尔序列,True表示该行是州名
is_state = places.isin(state_to_zip.keys())

2. 生成对应的邮政编码列

利用where只保留州名行的邮编,其他行设为NaN,再用ffill()(向前填充)把州的邮编"传递"给下面的所有城市行:

# 州名行匹配字典里的邮编,城市行先设为NaN,再向前填充
zip_codes = places.where(is_state).map(state_to_zip).ffill()

3. 生成最终的DataFrame

把地点和邮编合并成DataFrame就搞定了:

x = pd.DataFrame({
    '地点': places,
    '邮政编码': zip_codes
})

最终输出效果

你会得到这样的结果:

地点邮政编码
California90001
Los Angeles90001
San Francisco90001
Texas77001
Houston77001
Austin77001
New York10001
New York City10001
Buffalo10001

为什么这个方法比手动循环好?

  • 避免了手动维护临时变量的边界错误(比如最后一行的处理、空值的干扰)
  • 完全利用Pandas的矢量化操作,比循环快得多(尤其是数据量大的时候)
  • 自动解决了你提到的"遍历字典重复输出"的问题,因为我们只在州名行匹配一次邮编,其余行靠填充完成,没有多余的重复计算

如果你的真实数据里有特殊情况(比如州名和城市名重名),也不用担心:isin(state_to_zip.keys())只会把字典里存在的州名标记出来,不会误判城市。

内容的提问来源于stack exchange,提问作者mmyoung77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:25:09