我有一个数据帧,其中"State"列表示每条记录的State。我想把各州映射到各个地区,我创建了一个dict:
di = {'Mideast': ['DL', 'DC', 'MD', 'NJ', 'NY', 'PA'], 'West': [ . . , . .], . . . }
它是使用诸如之类的变量构建的
Mideast = ['DL', 'DC', 'MD', 'NJ', 'NY', 'PA']
为什么像这样天真的方法不起作用?
for i in df_test['State']:
if i in Mideast: i = 'Mideast';
df:的样本值
State Area Code Phone Intl Calls Intl Charge CustServ Calls Churn?
KS 415 382-4657 3 2.7 1 False.
我在网上搜索了可能的解决方案。我正在尝试它们,但上面的方法似乎太越界了,甚至没有人提到它,这让我很恼火。我显然不理解一些非常基本的东西,但我不知道它是什么。
试试这个:
import pandas as pd
di = {'Wonderful spam': ['Spam', 'Egg', 'Sausage'], 'Lovely spam': ['Baked beans', 'Tomato']}
df_test = pd.DataFrame(["Tomato"],columns=["State"])
for i, x in enumerate(df_test['State']):
for group, names in di.items():
if x in names:
df_test['State'][i] = group
print(df_test)
输出:
State
0 Lovely spam
试试这个:
di = {'Mideast': ['DL', 'DC', 'MD', 'NJ', 'NY', 'PA'], 'West': [ . . , . .], . . . }
mod_dict = {v:k for k,val in di.iteritems() for v in val}
for k,v in mod_dict.iteritems():
df_test.loc[df_test['States'] = k, 'States'] = v
我已将初始di
转换为形式的mod_dict
'DC': 'Mideast',
'DL': 'Mideast',
'MD': 'Mideast',
'NJ': 'Mideast',
'NY': 'Mideast',
'PA': 'Mideast'}
.
.
.
现在,我正在df
中查找每个国家/地区代码,如果找到,请将其替换为带有地区名称的代码值。
希望这能有所帮助。