首页 > 解决方案 > 检查列表中的一个单词并创建一个新变量

问题描述

我想使用列表中的城市列表获取 obras desc 内部的位置。

我有以下数据框

obras = pd.DataFrame([['1','Agua de Buenos Aires'],['2', 'Sistenas de carreteras Jujuy'],['3','Reasentamiento en Entre Ríos'], ['4','Rutas en Córdoba']],
columns = ['id', 'desc'])

和名单

list = ['Buenos Aires', 'Jujuy', Corrientes', 'Entre Ríos']

我试着这样做

for s in obras["desc"]:if any(xs in s for xs in list):obras['Localidad'] = s 

预期的结果是:

ID 描述 本地化
1 阿瓜德布宜诺斯艾利斯 布宜诺斯艾利斯
2 西斯泰纳斯·德·卡雷特拉斯 胡胡伊
3 Reasentamiento en Entre Ríos 恩特雷里奥斯
4 Rutas en Córdoba

但我得到的结果是:

ID 描述 本地化
1 阿瓜德布宜诺斯艾利斯 Reasentamiento en Entre Ríos
2 西斯泰纳斯·德·卡雷特拉斯 Reasentamiento en Entre Ríos
3 Reasentamiento en Entre Ríos Reasentamiento en Entre Ríos
4 Rutas en Córdoba Reasentamiento en Entre Ríos

我该如何解决这个问题?

谢谢!!!

标签: pythonpython-3.xstringlistdataframe

解决方案


您可以使用以下方法检查字符串中是否存在列表项apply

import pandas as pd

obras = pd.DataFrame([['1','Agua de Buenos Aires'],['2', 'Sistenas de carreteras Jujuy'],['3','Reasentamiento en Entre Ríos'], ['4','Rutas en Córdoba']],columns = ['id', 'desc'])

list_ = ['Buenos Aires', 'Jujuy', 'Corrientes', 'Entre Ríos']
obras['localidad'] = obras['desc'].apply(lambda x: next(iter([i for i in list_ if i in x]), None))

请注意 - 给定所需的输出 - 这仅在多个匹配的情况下返回第一个匹配。

ID 描述 本地化
0 1 阿瓜德布宜诺斯艾利斯 布宜诺斯艾利斯
1 2 西斯泰纳斯·德·卡雷特拉斯·胡胡伊 胡胡伊
2 3 Reasentamiento en Entre Ríos 恩特雷里奥斯
3 4 Rutas en Córdoba

PS。不要list用作变量名,因为它也是一个内置的 python 函数。


推荐阅读