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

基于pandas对比两个DataFrame并按子串匹配条件提取数据生成新表

解决方案

实现逻辑

我们需要判断df2中subdata列的每一个值,是否是df1fruit列任意值的子串,只要存在任意一个匹配就保留该行。

完整可运行代码

首先构造模拟数据验证效果,你可以直接替换成自己的真实DataFrame使用:

import pandas as pd

# 构造示例df1,可替换为你的真实数据
df1 = pd.DataFrame({
    'fruit': ['apple', 'banana', 'grapes', 'blueberry', 'cherry']
})

# 构造示例df2,可替换为你的真实数据
df2 = pd.DataFrame({
    'subdata': ['nan', 'pple', 'che', 'lsls', 'lueberry', 'cherry', 'app']
})

# 核心筛选逻辑
fruit_list = df1['fruit'].tolist()
# 对subdata每一个值x,判断是否有任意水果值包含x
mask = df2['subdata'].apply(lambda x: any(x in fruit for fruit in fruit_list))
result_df = df2[mask]

结果验证

输出result_df即可得到符合要求的筛选结果,示例中会保留'nan'、'pple'、'che'、'lueberry'、'cherry'、'app'对应的行,剔除不匹配的'lsls'行,和你需求的匹配规则完全一致。

大数据量优化方案

如果你的df2数据量超过10万行,可以提前把所有fruit的所有子串去重存为集合,用isin判断替代逐行apply,运行效率会提升数倍:

# 预生成所有fruit的所有子串集合
all_substrings = set()
for fruit in fruit_list:
    for i in range(len(fruit)):
        for j in range(i+1, len(fruit)+1):
            all_substrings.add(fruit[i:j])

# 直接用isin批量判断,速度更快
mask = df2['subdata'].isin(all_substrings)
result_df = df2[mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:24:00