重新映射 pandas 中的多个列

Remapping multiple columns in pandas

我想重新映射我的 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)     

您可以使用 startswith and locmask 筛选列并应用 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)