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

移除Pandas DataFrame同行列匹配的列表元素

解决方法

直接用Pandas的字符串处理结合apply就能搞定,步骤逻辑很简单:

  1. 先把similar_ids列的空值填充为空字符串,避免后续拆分报错
  2. 对每行数据做三件事:
    • 把similar_ids按, 拆分成单个元素的列表
    • 过滤掉列表里和当前行ID相同的值(注意统一类型,要么把ID转成字符串,要么把列表元素转成整数)
    • 把过滤后的列表再用, 拼接回字符串,空列表就返回空字符串

代码示例

假设你的DataFrame叫df,直接运行以下代码:

import pandas as pd

# 构造你给的示例数据
data = {
    "ID": [1, 2, 3, 4, 5],
    "similar_ids": ["1, 234, 3215", "2, 52, 1", "49, 3", "4", None]
}
df = pd.DataFrame(data)

# 自定义处理函数
def clean_similar_ids(row):
    # 处理空值情况
    if pd.isna(row["similar_ids"]):
        return ""
    # 拆分字符串并转成整数列表
    id_list = [int(item.strip()) for item in row["similar_ids"].split(",")]
    # 过滤掉和当前ID一致的元素,再转回字符串拼接
    filtered = [str(num) for num in id_list if num != row["ID"]]
    return ", ".join(filtered)

# 应用到列上
df["similar_ids"] = df.apply(clean_similar_ids, axis=1)

print(df)

运行结果

执行后就能得到你想要的格式:

ID similar_ids
0   1  234, 3215
1   2     52, 1
2   3        49
3   4           
4   5           

如果想更简洁,也可以用链式操作省掉自定义函数:

df["similar_ids"] = (
    df["similar_ids"]
    .fillna("")
    .str.split(", ")
    .apply(lambda x: [item for item in x if item != str(df.loc[x.name, "ID"])])
    .str.join(", ")
)

这个方法直接把ID转成字符串和拆分后的元素对比,逻辑更紧凑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:15:38