аналогичные слова заменить на новое слово - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть кадр данных, как показано ниже:

df = pd.DataFrame({
    "group_code": ['111', '111', '111', '111', '111', '111', '111', '222', '222','222', '222', '222', '222'],
    "ind_code": ['Credit pay', 'PAYMENT', 'loan payment', 'bill payment', 'pays', 'PayMent', 'Payer', 'Rev12','Rev11','13 rev','Rev13','Rev .!','REV 17']
})

Теперь мне нужно сгруппировать все похожие слова в "ind_code", и мой DF должен выглядеть следующим образом:

All "ind_code"со словом" pay "в нем (независимо от регистра, перед или последним или посередине) его следует заменить на" Payment ". Аналогично, все слова с" rev "должны быть заменены на Rev

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018
def replace_(row):
    if 'pay' in row.lower():
        return 'Payment'
    if 'rev' in row.lower():
        return 'Rev'
    return row
df.ind_code = df.ind_code.apply(lambda row : replace_(row))
print(df)
output:

   group_code ind_code
0         111  Payment
1         111  Payment
2         111  Payment
3         111  Payment
4         111  Payment
5         111  Payment
6         111  Payment
7         222      Rev
8         222      Rev
9         222      Rev
10        222      Rev
11        222      Rev
12        222      Rev
0 голосов
/ 24 ноября 2018

Вы можете сделать это с помощью регулярных выражений!

import pandas as pd
import numpy as np
import re

df = pd.DataFrame({"group_code": ['111', '111', '111', '111', '111', '111', 
                                  '111','222','222','222','222','222','222'], 
                     "ind_code": ['Credit pay', 'PAYMENT', 'loan payment', 'bill payment', 
                                  'pays', 'PayMent', 'Payer','Rev12',
                                  'Rev11','13 rev','Rev13','Rev .!','REV 17']})

conditions = [df['ind_code'].str.contains('(pay)', case=False) , df['ind_code'].str.contains('(rev)', case=False)]
choices = ['pay', 'rev']
df['result'] = np.select(conditions, choices, default='unclear')
df

https://regexr.com/

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.contains.html

0 голосов
/ 24 ноября 2018

Если вы хотите просто заменить слова, которые имеют похожий шаблон, вы можете использовать этот фрагмент

df.loc[df.ind_code.str.contains(r'[Pp][Aa][Yy]'),'ind_code']='Payment'
df.loc[df.ind_code.str.contains(r'[Rr][Ee][Vv]'),'ind_code']='Rev'

Редактировать

df.ind_code.str.extract(r'([PpRr][AaEe][YyVv])').str.lower().map({'pay':'Payment','rev':'Rev'})

Out:

    group_code  ind_code
0   111 Payment
1   111 Payment
2   111 Payment
3   111 Payment
4   111 Payment
5   111 Payment
6   111 Payment
7   222 Rev
8   222 Rev
9   222 Rev
10  222 Rev
11  222 Rev
12  222 Rev
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...