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

使用Pandas按指定列表规则过滤列并拆分符合50%占比要求的行

Pandas多参考列表匹配过滤+行拆分实现方案

实现逻辑

  • 预处理参考列表,自动计算每个列表的50%匹配阈值(向上取整,如长度3的列表阈值为2、长度5的列表阈值为3)
  • 拆分每行y列的逗号分隔字符串为集合,实现元素的快速匹配统计
  • 逐行校验与所有参考列表的匹配元素数量,符合阈值要求的收集对应匹配元素
  • 过滤无任何匹配的行,将多参考列表匹配结果拆分为独立行,保留原x、z列的取值

完整代码

import pandas as pd

# -------------------------- 配置项,可根据实际需求修改 --------------------------
# 参考列表定义
A1 = ["x", "m", "d"]
A2 = ["dd", "cc", "aa", "bb", "tt"]
A3 = ["kk", "yy", "ll", "ss"]
ref_lists = [A1, A2, A3]

# 自动生成参考列表映射和阈值(无需手动计算阈值)
ref_map = {}
for idx, lst in enumerate(ref_lists, 1):
    # 向上取整计算50%匹配阈值:(长度 + 1) // 2 等价于 math.ceil(长度 * 0.5)
    threshold = (len(lst) + 1) // 2
    ref_map[f"A{idx}"] = {"lst": lst, "threshold": threshold}

# 替换为你自己的待处理DataFrame
df = pd.DataFrame({
    "x": [1, 2, 3, 4],
    "y": ["x,m,d,aa", "dd,cc,aa,bb,xx", "kk,yy,zz,x,m", "a,b,c"],
    "z": ["val1", "val2", "val3", "val4"]
})
# ---------------------------------------------------------------------------

# 1. 拆分y列逗号分隔值为集合,方便匹配统计
df["y_set"] = df["y"].str.split(",").apply(set)

# 2. 逐行匹配所有参考列表,返回符合阈值的匹配元素列表
def match_rule(row):
    matched_res = []
    for info in ref_map.values():
        match_count = len(row["y_set"] & set(info["lst"]))
        if match_count >= info["threshold"]:
            # 收集匹配到的元素,按逗号拼接存储
            matched_items = ",".join(row["y_set"] & set(info["lst"]))
            matched_res.append(matched_items)
    return matched_res if matched_res else None

df["matched_y"] = df.apply(match_rule, axis=1)

# 3. 过滤无匹配行,拆分多匹配结果为独立行
result = df.dropna(subset=["matched_y"]).explode("matched_y")

# 4. 整理输出列,重命名匹配后的y列
result = result[["x", "matched_y", "z"]].rename(columns={"matched_y": "y"}).reset_index(drop=True)

print(result)

输出示例

以上示例代码的运行结果如下:

x           y     z
0  1       x,m,d  val1
1  2  dd,cc,aa,bb  val2
2  3         x,m  val3
3  3       kk,yy  val3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 05:15:01