如何在不拆分拼接列的前提下,基于列表检索匹配值?
可以实现,以下是几种主流工具的实现方案
Excel 场景
不用拆分列,直接用数组公式就能搞定。假设你的数据在A列(ID)、B列(Aleatory Stuff),先把list_0里的内容放到一个单元格区域(比如D1:D5),然后通过名称管理器把这个区域命名为list_0。之后在C2单元格输入公式:=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(list_0, B2)), list_0, ""))
- 如果你用的是Excel 365/2021版本,直接回车就行;旧版本需要按
Ctrl+Shift+Enter作为数组公式执行,然后下拉填充到所有行。
Python Pandas 场景
用apply遍历每行,在不拆分原列的前提下匹配元素,代码示例如下:
import pandas as pd list_0 = ["Ball", "cellphone", "breakfast", "rice", "test"] # 读取你的表格,根据实际格式调整(比如csv) df = pd.read_excel("your_file.xlsx") def get_matches(row): # 按原列的分隔符拆分(如果是纯逗号就改成",") raw_items = row["Aleatory Stuff"].split(", ") # 筛选出在list_0里的元素 matched = [item for item in raw_items if item in list_0] # 重新拼接成字符串 return ", ".join(matched) # 生成新列 df["List Stuff"] = df.apply(get_matches, axis=1) # 保存结果 df.to_excel("result_file.xlsx", index=False)
SQL 场景(以MySQL为例)
通过子表生成list_0的元素列表,结合字符串匹配函数实现,不需要拆分原列:
SELECT ID, `Aleatory Stuff`, GROUP_CONCAT( CASE WHEN FIND_IN_SET(item, `Aleatory Stuff`) > 0 THEN item ELSE NULL END SEPARATOR ', ' ) AS `List Stuff` FROM your_table_name, -- 把list_0的元素构造成临时表 (SELECT "Ball" AS item UNION ALL SELECT "cellphone" UNION ALL SELECT "breakfast" UNION ALL SELECT "rice" UNION ALL SELECT "test") AS list_temp GROUP BY ID, `Aleatory Stuff`;
如果原列的元素带空格,FIND_IN_SET可能失效,MySQL 8.0+可以改用REGEXP_CONTAINS来调整匹配逻辑。
内容的提问来源于stack exchange,提问作者Naiara Tabanez
相关产品推荐
相关产品推荐

