Есть ли функция для выбора первых 2 слов после указанной строки? - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь выбрать первые 2 слова после строки 'POS PURCHASE' в моем наборе данных.

Это мой набор данных.

df:   
    ID        transaction_description
     1         POS PURCHASE MR PRICE WHK FAC
     2         WITHDRAWAL FEE
     3         POS PURCHASE KFC WERNHIL STATE
     4         REJECTED ATM TRANSACTION
     5         ATM CASH WITHDRAWAL
     6         POS PURCHASE EDGARS GROVE

Вот как яхочу, чтобы мой вывод выглядел следующим образом:

dfnew:
    ID       transaction_description                 TRANX
     1       POS PURCHASE MR PRICE WHK FAC          MR PRICE
     2       WITHDRAWAL FEE                         WITHDRAWAL FEE
     3       POS PURCHASE KFC WERNHIL STATE         KFC WERNHIL
     4    REJECTED ATM TRANSACTION               REJECTED ATM TRANSACTION
     5         ATM CASH WITHDRAWAL                   ATM CASH WITHDRAWAL  
     6         POS PURCHASE EDGARS GROVE MALL        EDGARS GROVE

Я пытался использовать этот код, но не смог создать новый столбец, содержащий вывод, который я хочу.

code:

   for value in df['transaction_description'].values:
       non_data = re.split('POS PURCHASE |POS PURCHASE ',value)
       terms_list = [term for term in non_data if len(term) > 0] 
       substrs = [term.split()[0:1] for term in terms_list] 
       result = [' '.join(term) for term in substrs] 
   print (result)

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Если POS PURCHASE всегда в начале, как в случае с вашими примерами данных, вы можете просто удалить его.

df['TRANX'] = df['transaction_description'].str.replace('POS PURCHASE ', '')
0 голосов
/ 14 октября 2019

Это один подход с использованием регулярных выражений.

Пример:

import re

df = pd.DataFrame({"transaction_description": ['POS PURCHASE MR PRICE WHK FAC', 'WITHDRAWAL FEE', 'POS PURCHASE KFC WERNHIL STATE', 'REJECTED ATM TRANSACTION', 'ATM CASH WITHDRAWAL', 'POS PURCHASE EDGARS GROVE']})
df["TRANX"] = df["transaction_description"].apply(lambda x: re.search(r"POS PURCHASE (\w+\s+\w+)", x).group(1) if "POS PURCHASE" in x else x)
print(df)

Вывод:

          transaction_description                     TRANX
0   POS PURCHASE MR PRICE WHK FAC                  MR PRICE
1                  WITHDRAWAL FEE            WITHDRAWAL FEE
2  POS PURCHASE KFC WERNHIL STATE               KFC WERNHIL
3        REJECTED ATM TRANSACTION  REJECTED ATM TRANSACTION
4             ATM CASH WITHDRAWAL       ATM CASH WITHDRAWAL
5       POS PURCHASE EDGARS GROVE              EDGARS GROVE

Редактировать - используя str.extract

df = pd.DataFrame({"transaction_description": ['POS PURCHASE MR PRICE WHK FAC', 'WITHDRAWAL FEE', 'POS PURCHASE KFC WERNHIL STATE', 'REJECTED ATM TRANSACTION', 'ATM CASH WITHDRAWAL', 'POS PURCHASE EDGARS GROVE']})
df["TRANX"] = df["transaction_description"].str.extract(r"POS PURCHASE (\w+\s+\w+)")
df["TRANX"].fillna(df["transaction_description"], inplace=True)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...