Как объединить файлы, используя строку содержит функцию в Python? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть два фрейма данных, которые выглядят так:

df1

cleaned_transaction_data
MR PRICE FNB WHK
NANDOS
MR PRICE
CHECKERS WERNH
PICK'N PAY FNB
EAT-SUM-MOR-MEAT LUDERI
SPAR SWAKOPMUND FNB
LEGIT SWAKOP
SHOPRITE
KFC

df2

merchant_name        description_merchant
CHECKERS             groceries
MR PRICE             clothing
EAT-SUM-MOR-MEAT     butchery
PICK PAY             groceries            
LEGIT                clothing
SPAR                 supermarket

Я хотел бы объединить эти фреймы данных, используя строкусодержит функцию в python, если df1.cleaned_transaction_data содержит аналогичную строку в df2.merchant_name, то выведите df2.description_merchant.

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

Код Python:

dfnew = pd.merge(df1, df2, left_on= 'cleaned_transaction_data', right_on='merchant_name')

Это вывод, полученный из кода, который я использовал:

cleaned_transaction_data        merchant_name        description_merchant
  MR PRICE                        MR PRICE              clothing

желаемый выход

cleaned_transaction_data        merchant_name        description_merchant
  MR PRICE FNB WHK                MR PRICE              clothing
  NANDOS                           null                   null
  MR PRICE                         MR PRICE             clothing
  CHECKERS WERNH                  CHECKERS              groceries
  PICK'N PAY FNB                  PICK PAY              groceries
  EAT-SUM-MOR-MEAT LUDERI        EAT-SUM-MOR-MEAT       butchery
  SHOPRITE                        null                    null
  LEGIT SWAKOP                   LEGIT                  clothing
  KFC                              null                   null

1 Ответ

0 голосов
/ 25 сентября 2019

Используйте Series.str.extract для получения первых значений из df2['merchant_name'], к которому добавлено | для регулярных выражений OR и \b\b для границ слов, для использования во втором столбце Series.map:

pat = '|'.join(r"\b{}\b".format(x) for x in df2['merchant_name'])

df1['merchant_name'] = df1['cleaned_transaction_data'].str.extract('('+ pat + ')',expand=False)
s = df2.set_index('merchant_name')['description_merchant']
df1['description_merchant'] = df1['merchant_name'].map(s)

print (df1)
  cleaned_transaction_data     merchant_name description_merchant
0         MR PRICE FNB WHK          MR PRICE             clothing
1                   NANDOS               NaN                  NaN
2                 MR PRICE          MR PRICE             clothing
3           CHECKERS WERNH          CHECKERS            groceries
4           PICK'N PAY FNB               NaN                  NaN
5  EAT-SUM-MOR-MEAT LUDERI  EAT-SUM-MOR-MEAT             butchery
6      SPAR SWAKOPMUND FNB              SPAR          supermarket
7             LEGIT SWAKOP             LEGIT             clothing
8                 SHOPRITE               NaN                  NaN
9                      KFC               NaN                  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...