将值映射到关键点



我有一个数据帧,其中"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中查找每个国家/地区代码,如果找到,请将其替换为带有地区名称的代码值。

希望这能有所帮助。

最新更新