Как сопоставить ключ с несколькими значениями в столбце данных? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть столбец df, который выглядит следующим образом:

col1
Non Profit
Other-501c3
501c3
Sole Proprietor

Как создать объект словаря или слой отображения (открытый для всех предложений), где я могу передать любое значение, если оно соответствует критериям и изменениямк значению ключа?

Например, если значение равно Other-501c3, измените его на non-profit.

Примеры (все после знака равенства должно меняться на значение перед знаком равенства):

1. non-profit = (Non Profit, Other-501c3, 501c3,NON-Profit, Not-for-profit).

2. Sole Proprietor = (Sole Proprietor,Sole Proprietorship)

Решение должно быть масштабируемым, я могу добавить больше пар «ключевое значение»

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Аналогично @ jezrael's , но вместо создания нового словаря вы можете использовать collections.ChainMap:

from collections import ChainMap

# dataframe setup
df = pd.DataFrame({'col1': ['Non Profit', 'Other-501c3', '501c3', 'Sole Proprietor']})

# create ChainMap
L1 = ['Non Profit', 'Other-501c3', '501c3','NON-Profit', 'Not-for-profit']
L2 = ['Sole Proprietor','Sole Proprietorship']
d = ChainMap(dict.fromkeys(L1, 'non-profit'), dict.fromkeys(L2, 'Sole Proprietor'))

# map values
df['new'] = df['col1'].map(d.get)

print(df)

              col1              new
0       Non Profit       non-profit
1      Other-501c3       non-profit
2            501c3       non-profit
3  Sole Proprietor  Sole Proprietor
0 голосов
/ 11 октября 2018

Создание словарей из key s, объединение их и map:

L1 = ['Non Profit', 'Other-501c3', '501c3','NON-Profit', 'Not-for-profit']
d1 = dict.fromkeys(L1, 'non-profit')

L2 = ['Sole Proprietor','Sole Proprietorship']
d2 = dict.fromkeys(L2, 'Sole Proprietor')

d = {**d1, **d2}
print (d)
{'Non Profit': 'non-profit', 
 'Other-501c3': 'non-profit', 
 '501c3': 'non-profit',
 'NON-Profit': 'non-profit', 
 'Not-for-profit': 'non-profit', 
 'Sole Proprietor': 'Sole Proprietor',
 'Sole Proprietorship': 'Sole Proprietor'}

df['new'] = df['col1'].map(d)
print (df)
              col1              new
0       Non Profit       non-profit
1      Other-501c3       non-profit
2            501c3       non-profit
3  Sole Proprietor  Sole Proprietor
...