我想在我的DataFrame的几个列中重新映射值:从[site1]到[site5]。
这是我的字典:
new_dict
{'accounts.google.com': 5,
'apis.google.com': 7,
'football.kulichki.ru': 9,
'geo.mozilla.org': 3,
'google.com': 4,
'mail.google.com': 6,
'meduza.io': 10,
'oracle.com': 2,
'plus.google.com': 8,
'vk.com': 1,
'yandex.ru': 11}
site1 site2 site3 site4 site5 user
0 vk.com oracle.com oracle.com geo.mozilla.org oracle.com 1
1 vk.com google.com google.com google.com 0 2
有没有办法同时重新映射这些列? 我正在尝试这种方法,但它无论如何都不起作用......
df_train['site%d' %(range(1,11))].replace(new_dict)
答案 0 :(得分:4)
您可以使用startswith
和loc
按mask
过滤列,然后应用replace
:
m = df_train.columns.str.startswith('site')
df_train.loc[:, m] = df_train.loc[:, m].replace(new_dict)
或者:
df_train.update(df_train.loc[:, m].replace(new_dict))
print (df_train)
site1 site2 site3 site4 site5 user
0 1 2 2 3 2 1
1 1 4 4 4 0 2
<强>详细强>:
print (m)
[ True True True True True False]
print (df_train.loc[:, m])
site1 site2 site3 site4 site5
0 vk.com oracle.com oracle.com geo.mozilla.org oracle.com
1 vk.com google.com google.com google.com 0
如果其他列中dict的值绝对不是最简单的:
df_train = df_train.replace(new_dict)