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

基于部分字符串匹配创建新的Pandas DataFrame

解决方案:基于列表中的字符串匹配拆分DataFrame

没问题!这在pandas里完全可以用内置功能实现,我给你两种常用的方法,你可以根据自己的数据规模和需求选择:

方法一:直接用apply筛选(适合中小数据集)

首先假设你的DataFrame结构类似这样(我先造个示例方便演示):

import pandas as pd

df = pd.DataFrame({
    'UserID': [101, 102, 103, 104],
    'Book': [['International', 'Monthly'], ['Domestic'], ['Subscription', 'Digital'], ['International', 'Subscription']]
})

要提取包含目标字符串的行,只需要对Book列使用apply,配合lambda函数检查目标值是否在列表中,再用布尔索引筛选即可:

1. 生成包含International的DataFrame

df_international = df[df['Book'].apply(lambda x: 'International' in x)]

2. 生成包含Domestic的DataFrame

df_domestic = df[df['Book'].apply(lambda x: 'Domestic' in x)]

3. 生成包含Subscription的DataFrame

df_subscription = df[df['Book'].apply(lambda x: 'Subscription' in x)]

这种方法逻辑直观,代码简洁,对于中小规模的数据完全够用。

方法二:用explode拆分后筛选(适合大数据集)

如果你的数据集很大,apply的效率可能不够高,这时候可以先把列表拆分成多行,筛选后再合并回原结构:

# 先将Book列的列表拆分为多行
df_exploded = df.explode('Book')

# 筛选出International的行,再按UserID分组还原列表
df_international = df_exploded[df_exploded['Book'] == 'International'].groupby('UserID')['Book'].apply(list).reset_index()

# 同理处理Domestic和Subscription
df_domestic = df_exploded[df_exploded['Book'] == 'Domestic'].groupby('UserID')['Book'].apply(list).reset_index()
df_subscription = df_exploded[df_exploded['Book'] == 'Subscription'].groupby('UserID')['Book'].apply(list).reset_index()

这种方法利用pandas的向量化操作,效率会比apply更高,适合处理百万级以上的数据集。

两种方法都不需要额外安装库,都是pandas的内置功能,你可以根据自己的情况选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:27:47