Python 基于指定列中的字符串值项是否包含子字符串来分隔数据帧

Python 基于指定列中的字符串值项是否包含子字符串来分隔数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有以下数据框: df = pd.DataFrame({'name':['a', 'b', 'c','d','e'], 'description':['vim2tests','vim2trial','vim3tests','vim3zip', 'vim4trial'], 'count':[4,5,6,7,8]}) 我试图将包含行的数据框分成3个,其中“description”条目包含“vim2”、“vim3”、“vim4”子字符串 有没有一种有效的方法可以做到这一点?我可以实现一个for循

假设我有以下数据框:

df = pd.DataFrame({'name':['a', 'b', 'c','d','e'], 'description':['vim2tests','vim2trial','vim3tests','vim3zip', 'vim4trial'], 'count':[4,5,6,7,8]})
我试图将包含行的数据框分成3个,其中“description”条目包含“vim2”、“vim3”、“vim4”子字符串


有没有一种有效的方法可以做到这一点?我可以实现一个for循环来查找我想要的行的索引,但这根本没有效率,我正在努力寻找更好的方法。

IIUC,只需使用
str.extract
创建一个条件列来
groupby

我们可以将数据帧保存在字典中

dfs = {group : data.drop('key',1) for group,data in 
                 df.assign(key=df['description'].str.extract('(vim\d+)'))\
                           .groupby('key')
}


还是anky提出的更简单的解决方案-

dfs = dict(tuple(
           df.groupby(df['description'].str.extract('(vim\d+)'
                                        ,expand=False))
         ))
或:



你真的需要三个或更多的数据帧作为输出吗?@DavideBrex在我的数据集中有10个。但我有兴趣了解更多的解决方案。
print(dfs.keys())

dict_keys(['vim2', 'vim3', 'vim4'])
dfs = dict(tuple(
           df.groupby(df['description'].str.extract('(vim\d+)'
                                        ,expand=False))
         ))
dict(iter(df.groupby(df['description'].str.extract('(vim\d+)',expand=False)))
print(dfs)

{'vim2':   name description  count
 0    a   vim2tests      4
 1    b   vim2trial      5,
 'vim3':   name description  count
 2    c   vim3tests      6
 3    d     vim3zip      7,
 'vim4':   name description  count
 4    e   vim4trial      8}