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

如何用Pandas内置方法判断水果列是否包含字符串列子串?

问题描述

现有如下DataFrame:

import pandas as pd
df = pd.DataFrame(data={'String': list('abcde'), 'Fruit': ['apple', 'pineapple', 'banana', 'orange', 'kiwi']})

初始表格输出:

String      Fruit
0      a      apple
1      b  pineapple
2      c     banana
3      d     orange
4      e       kiwi

需求:判断每个水果名称是否包含String列中的某个字符,期望输出如下格式的结果:

a      b      c      d      e
Fruit                                       
apple       True  False  False  False   True
pineapple   True  False  False  False   True
banana      True   True  False  False  False
orange      True  False  False  False   True
kiwi       False  False  False  False  False

目前用Python循环实现了需求,但数据量大时效率很低:

df_new = pd.DataFrame()
for i in range(len(df)):
    df_new.loc[:, df.String[i]] = df.Fruit.str.contains(df.String[i])
df_new.set_index(df.Fruit)

问:能不能用Pandas内置方法高效实现这个需求?

解决方案

可以用Pandas的向量化操作实现,完全避免Python层级的循环,大幅提升性能,代码也更简洁:

高效实现代码

import pandas as pd

df = pd.DataFrame(data={'String': list('abcde'), 'Fruit': ['apple', 'pineapple', 'banana', 'orange', 'kiwi']})

# 对每个String列的字符,向量化检查所有Fruit是否包含该字符,转置后设置索引
result = df['String'].apply(lambda s: df['Fruit'].str.contains(s)).T
result.index = df['Fruit']

print(result)

代码说明

  1. df['String'].apply(lambda s: df['Fruit'].str.contains(s)):遍历String列的每个字符,用Pandas内置的str.contains向量化检查所有水果名称是否包含该字符,得到一个以字符为行、水果为列的布尔DataFrame
  2. .T:转置DataFrame,让水果作为行索引,字符作为列名,匹配期望的输出结构
  3. result.index = df['Fruit']:将行标签设置为水果名称,完成最终格式调整

运行后输出的结果和需求完全一致,且因为用了Pandas的向量化字符串操作,处理大数据集时的效率会比Python循环高一个数量级以上。

内容的提问来源于stack exchange,提问作者T C Molenaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:01:17