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

如何在Pandas DataFrame中检测同列子串并生成对应新列

解决DataFrame中子串匹配并生成对应长字符串的问题

没问题,我来帮你搞定这个需求!你需要检测col1中每个字符串是否是同列其他字符串的子串,并在col2中存储对应的匹配长字符串(如果没有匹配项则保留原字符串),下面是具体的实现方案:

步骤1:构造示例DataFrame

首先我们先还原你的示例数据:

import pandas as pd

data = {'col1': ['donald', 'mike', 'donald trump', 'trump', 'mike pence', 'pence', 'jarred']}
df1 = pd.DataFrame(data)

步骤2:编写匹配逻辑

核心思路是:先把所有字符串按长度降序排序(这样更长的字符串会被优先检查,避免短字符串被误匹配),然后对每个字符串,找到第一个包含它且不等于它的候选字符串,找不到就返回原字符串。

实现代码如下:

def find_matching_long_string(s, sorted_strings):
    # 遍历排序后的字符串列表,找第一个包含当前字符串的非自身候选
    for candidate in sorted_strings:
        if s != candidate and s in candidate:
            return candidate
    # 没有找到匹配项,返回原字符串
    return s

# 按字符串长度从长到短排序
sorted_str_list = sorted(df1['col1'], key=lambda x: -len(x))

# 应用函数生成col2
df1['col2'] = df1['col1'].apply(lambda x: find_matching_long_string(x, sorted_str_list))

步骤3:查看结果

运行上述代码后,打印df1就能得到你想要的结果:

print(df1)

输出结果:

col1          col2
0       donald  donald trump
1         mike    mike pence
2  donald trump  donald trump
3        trump  donald trump
4    mike pence    mike pence
5        pence    mike pence
6        jarred        jarred

这个方案完美匹配你的需求,每个子串都能对应到包含它的最长字符串,没有匹配项的jarred也保留了原内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:24:39