Разделение кадра данных pandas в зависимости от того, содержит ли строка со строковым значением в указанном столбце подстроку - PullRequest
2 голосов
/ 20 июня 2020

Предположим, у меня есть следующий фрейм данных:

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 'substring.

Есть эффективный способ сделать это? Я мог бы реализовать для l oop, чтобы найти индексы для строк, которые мне нужны, но это совсем неэффективно, и я изо всех сил пытаюсь понять, как это сделать лучше.

1 Ответ

5 голосов
/ 20 июня 2020

IIU C, просто создайте условный столбец для groupby, используя str.extract

, мы можем хранить фреймы данных в словаре.

dfs = {group : data.drop('key',1) for group,data in 
                 df.assign(key=df['description'].str.extract('(vim\d+)'))\
                           .groupby('key')
}
print(dfs['vim3'])
  name description  count
2    c   vim3tests      6
3    d     vim3zip      7
print(dfs.keys())

dict_keys(['vim2', 'vim3', 'vim4'])

или более простое решение от anky -

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...