python - 多个匹配和空格变体(python 查找以在匹配后返回另一列)
问题描述
以前,我在不同的列表上匹配了值(这个线程如何让 python 查找在匹配后返回另一列)
import pandas as pd
import numpy as np
df = pd.DataFrame({'Name':['a cat dog - multiple', 'grey puppy - narrow term', 'a cat puppy', 'reddog - single no spaces', 'acatdog - multiple no spaces']})
df2 = pd.DataFrame({'BroadTerm':['cat', 'cat', 'dog', 'dog'], 'NarrowTerm':['cat', 'kitten', 'puppy', 'dog']})
有几个问题:
- 单元格中有 1 个或多个值的匹配值(例如数据框的第 1 行)
- 不包含任何空格的匹配值(例如 df 的第 4 行和第 5 行)
基本代码是
df['Animal'] = df['Name'].str.extract(pat = f"({'|'.join(df2.NarrowTerm)})")[0].map(dict(df2.iloc[:,::-1].values))
但这仅适用于单次命中单元格/返回第一次命中)
我如何修改代码来做到这一点?
解决方案
findall
那我们可以试试explode
df['step1'] = df['Name'].str.findall(pat = f"({'|'.join(df2.NarrowTerm)})")
df['animal'] = df['step1'].explode().map(dict(df2.iloc[:,::-1].values)).groupby(level=0).agg(list)
df
Out[63]:
Name step1 animal
0 a cat dog - multiple [cat, dog] [cat, dog]
1 grey puppy - narrow term [puppy] [dog]
2 a cat puppy [cat, puppy] [cat, dog]
3 reddog - single no spaces [dog] [dog]
4 acatdog - multiple no spaces [cat, dog] [cat, dog]
推荐阅读
- merge - Pandas 直接从 read_csv 合并或加入
- python - 在 python3 中使用 break 指令时出现问题
- react-native - 如何在 React 本机 CLI 中显示应用程序加载(没有 expo)
- linux - “sudo: k0s: command not found”:即使它的脚本是可执行的并且它的位置在路径中
- android - 如何在使用 expo 构建的反应原生应用程序中的 AndroidManifest 中添加属性?
- spring - 验证 ConfigurationProperties 映射
- reactjs - 配置 React Native
- c# - 一对零或一关系Entity Framework,获取一个实体的关系
- windows - 在 Windows 中,是否有可能知道导致进程终止的原因?
- python - 尝试搜索名称中带有空格的城市的预测。Openweathermap API Django Python