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