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

如何用Pandas基于列值匹配外部列表创建geo_region新列?

为DataFrame添加匹配多区域的geo_region列

问题背景

现有如下DataFrame:

Unnamed geo_zones_pickups       Delstat             region
4        4  ['52102' '53101']  ['52102' '53101']   [52102, 53101]
5        5        ['52102']        ['52102']           [52102]

以及三个区域编码列表:

north = ['51101', '51105', '51100']
midt = ['52103', '52102', '52104', '52101', '52150']
south = ['53101', '53102', '53106', '53103', '53105', '53104']

需要新增geo_region列,规则为:若region列中的任一元素属于某个区域列表,则将该列表名加入geo_region,多个匹配结果用逗号分隔。期望输出如下:

Unnamed geo_zones_pickups       Delstat             region  geo_region
4        4  ['52102' '53101']  ['52102' '53101']   [52102, 53101]  midt,south
5        5        ['52102']        ['52102']           [52102]         midt

补充信息:geo_zones_pickups、Delstat为object类型(元素以字符串形式存储);region同样为object类型(元素是字符串列表)。此前尝试交集方法仅能匹配单个区域,需实现多区域同时匹配的逻辑。

解决方案

方案1:基于列表匹配(通用场景)

先将区域列表整理为字典,再逐行检查region中的元素是否属于某个区域,最后拼接匹配的区域名:

import pandas as pd

# 构建区域映射字典
region_mapping = {
    'north': north,
    'midt': midt,
    'south': south
}

# 定义处理单行的函数
def get_matched_regions(region_list):
    matched = []
    for region_name, code_list in region_mapping.items():
        # 检查当前region列表是否有元素在目标区域编码中
        if any(code in code_list for code in region_list):
            matched.append(region_name)
    return ','.join(matched)

# 应用函数生成新列
df['geo_region'] = df['region'].apply(get_matched_regions)

方案2:利用前缀规则(高效优化)

题目明确给出编码前缀规则:north以511开头,midt以521开头,south以531开头,可直接通过前缀判断,无需遍历全部编码列表,效率更高:

# 构建前缀与区域名的映射
prefix_map = {
    '511': 'north',
    '521': 'midt',
    '531': 'south'
}

def get_regions_by_prefix(region_list):
    matched_regions = set()
    for code in region_list:
        prefix = code[:3]
        if prefix in prefix_map:
            matched_regions.add(prefix_map[prefix])
    # 排序保证结果一致性,再拼接
    return ','.join(sorted(matched_regions))

# 应用函数生成新列
df['geo_region'] = df['region'].apply(get_regions_by_prefix)

验证结果

两种方案均可得到符合预期的输出:

Unnamed geo_zones_pickups       Delstat             region  geo_region
4        4  ['52102' '53101']  ['52102' '53101']   [52102, 53101]  midt,south
5        5        ['52102']        ['52102']           [52102]         midt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:54:54