Как обрабатывать строковые шаблоны - PullRequest
0 голосов
/ 14 февраля 2020

Проблема

У меня есть столбец в кадре данных, который имеет 4 различных строковых шаблона, например:

COLUMN |  
'NE=123'  
'NE=123, FR=4'  
'NE=123, FR=4, S=5, CP=6'  
'NE=123, FR=4, S=5, CP=6, SC=78, PP=99'

Я хочу создать столбец для кодирования шаблонов, чтобы выходные данные были такими:

COLUMN                                |  CATEGORY
AA=123                                | A
AA=123, BB=4                          | AB
AA=123, BB=4, CC=5, DD=6              | ABCD
AA=123, BB=4, CC=5, DD=6, EE=78, FF=99| ABCDEF  

Я пытался посмотреть, сработало ли что-то вроде

A = 'AA'
B = 'BB'  
C = ['CC', 'DD']
D = ['EE', 'FF']
df[df['COLUMNS'].str.contains(A, B, '|'.join(C)==False, '|'.join(D)==False)]  

Но я также получаю строки с включенными C и D.

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Я бы сделал это с помощью комбинации функций в лямбде:

import pandas as pd
import re
df = pd.DataFrame({'column_1':['NE=123','NE=123, FR=4' ,'NE=123, FR=4, S=5, CP=6',
                               'NE=123, FR=4, S=5, CP=6, SC=78, PP=99'],
                    'index':[0,1,2,3]})
print(df)
df['category'] = df['column_1'].apply(lambda x: ''.join(sorted(list(set(re.findall(r'[A-Z]+',x))))))
print(df)

Вывод:

                                column_1  index     category
0                                 NE=123      0           NE
1                           NE=123, FR=4      1         FRNE
2                NE=123, FR=4, S=5, CP=6      2      CPFRNES
3  NE=123, FR=4, S=5, CP=6, SC=78, PP=99      3  CPFRNEPPSSC
0 голосов
/ 14 февраля 2020

Попробуйте следующим образом:

DataFrame:

d={'COLUMN': 
['AA=123' ,
'AA=123, BB=4',  
'AA=123, BB=4, CC=5, DD=6 ', 
'AA=123, BB=4, CC=5, DD=6, EE=78, FF=99']}

df=pd.DataFrame(d)

Функция для поиска шаблона:

def f(s):
  m=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

  p = []
  r=''

  for x in s:
    if x in m and x not in p:
      p.append(x)
      r+=str(x)

  return r

Создать category столбец:

df['Category']=df['COLUMN'].apply(lambda x :  f(x))

Вывод:

    COLUMN                                  Cateory
0   AA=123                                  A
1   AA=123, BB=4                            AB
2   AA=123, BB=4, CC=5, DD=6                ABCD
3   AA=123, BB=4, CC=5, DD=6, EE=78, FF=99  ABCDEF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...