Python使用numpy.where或numpy.select做多字符串匹配赋值方案咨询
问题原因
你之前使用np.where和np.select无法得到预期结果的核心原因是:df['location'].isin(列表)的逻辑是判断整个单元格的字符串是否和列表中的某个值完全相等,但你的location列是多个城市拼接的字符串,自然无法完成匹配,这个问题和numpy本身的能力无关,是判断逻辑不符合你的业务场景。
最简实现方案
这类多城市匹配分区的场景,最简便的实现方式是先构造「城市-地理分区」的映射字典,再逐行拆分城市、匹配对应分区后拼接结果,完整可运行代码如下:
import pandas as pd Europe = ['London', 'Paris', 'Berlin'] North_America = ['New York', 'Toroto', 'Boston'] Asia = ['Hong Kong', 'Tokyo', 'Singapore'] # 构造城市到分区的映射字典 city_region_map = {} for city in Europe: city_region_map[city] = 'Europe' for city in North_America: city_region_map[city] = 'North America' for city in Asia: city_region_map[city] = 'Asia' # 构造测试数据集 data = {'location':["London, Paris", "Hong Kong", "London, New York", "Singapore, Toroto", "Boston"]} df = pd.DataFrame(data) # 生成geo列 df['geo'] = df['location'].apply(lambda x: ', '.join([city_region_map[city] for city in x.split(', ')]))
运行后得到的df和你给出的预期输出完全一致。
关于Numpy实现的说明
理论上可以通过Numpy的向量化字符串操作完成拆分、匹配、拼接的逻辑,但实现过程远不如上述pandas方案简洁,可读性和维护性都更差,没有必要刻意使用Numpy实现。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

