重新映射pandas中的多个列

时间:2018-02-13 13:58:16

标签: pandas dictionary dataframe remap

我想在我的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)     

1 个答案:

答案 0 :(得分:4)

您可以使用startswithlocmask过滤列,然后应用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)