我有一个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)
该解决方案应该具有可扩展性,我可以添加更多“键值”对
先谢谢您。
答案 0 :(得分:4)
从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
答案 1 :(得分:0)
与@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