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

如何在Pandas DataFrame中生成包含前缀匹配ID列表的新列

解决方案:为DataFrame添加包含匹配字符串的ID列表列

首先,针对你提出的需求——给现有DataFrame新增一列,每一行的值是所有其他行的string_value完全包含当前行string_value的ID组成的列表,这里有一个基于pandas的简洁实现方案:

示例数据准备

先还原你提供的原始DataFrame:

import pandas as pd

data = {
    'id': [1, 2, 3, 4, 5, 6],
    'string_value': [
        'The quick brown fox',
        'The quick brown fox jumps',
        'The quick brown fox jumps over',
        'The quick brown fox jumps over the lazy dog',
        'The slow',
        'The slow brown fox'
    ]
}
df = pd.DataFrame(data)

实现代码

我们可以通过apply方法结合自定义函数来完成需求:

def get_matching_ids(row, full_df):
    # 筛选条件:其他行的string_value包含当前行的字符串,且排除当前行自身
    matching_rows = full_df[
        (full_df['string_value'].str.contains(row['string_value'])) & 
        (full_df['id'] != row['id'])
    ]
    # 返回匹配到的ID列表
    return matching_rows['id'].tolist()

# 逐行应用函数生成新列
df['new_columns'] = df.apply(lambda x: get_matching_ids(x, df), axis=1)

运行结果

执行完上述代码后,你的DataFrame就会变成期望的样子:

idstring_valuenew_columns
1The quick brown fox[2, 3, 4]
2The quick brown fox jumps[3, 4]
3The quick brown fox jumps over[4]
4The quick brown fox jumps over the lazy dog[]
5The slow[6]
6The slow brown fox[]

补充说明

  • 如果需要忽略大小写匹配,可以在str.contains里加上case=False参数,比如full_df['string_value'].str.contains(row['string_value'], case=False)
  • 这个方案的时间复杂度是O(n²),如果你的DataFrame行数非常多(比如上万行),可能需要优化,但对于中小规模的数据完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:27:31