Python 根据另一个序列的条件,使用字典替换序列对象中的项

Python 根据另一个序列的条件,使用字典替换序列对象中的项,python,pandas,numpy,dictionary,series,Python,Pandas,Numpy,Dictionary,Series,我有一个包含一系列州和国家的数据框。国家/地区系列缺少多个值。我有一本美国各州的字典,我用它来整理各州系列。我想用它来表示,如果国家在字典中,那么国家应该是美国 我可以使用映射到美国的州词典,即{'AL':'USA','AK':'USA'…} 然后使用df['Country']=df['Country'].map(dict)但我相信有更好/更聪明/更简单的方法来实现这一点 我试过这个: test = df[['State', 'Country']] for a, b in test.itertu

我有一个包含一系列州和国家的数据框。国家/地区系列缺少多个值。我有一本美国各州的字典,我用它来整理各州系列。我想用它来表示,如果国家在字典中,那么国家应该是美国

我可以使用映射到美国的州词典,即
{'AL':'USA','AK':'USA'…}
然后使用
df['Country']=df['Country'].map(dict)
但我相信有更好/更聪明/更简单的方法来实现这一点

我试过这个:

test = df[['State', 'Country']]
for a, b in test.itertuples(index=False):
    if a in us_state_abbrev.values():
        b = "USA"
    elif a in ca_province_abbrev.values():
        b = "Canada"
其中
test.head()
返回:

         State       Country
0          MO           NaN
1          IA           USA
2          MI           NaN
3          AB        Canada
4          ON        Canada
us_state_abbrev={'Alabama':'AL','Alaska':'AK'…}

尽管if-else语句有效,但没有任何变化。为什么呢

我也试过:

test['Country'] = np.where(test['State'] in us_state_abbrev.values(), "USA", test['Country'])

但我得到了一个ValueError:级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。为什么会这样?

不要在中使用
。您需要使用
np.where

us_state_abbrev = {'Alabama': 'AL', 'Alaska': 'AK', 'IOWA': 'IA', 'Mississippi': 'MI', 'Missouri': 'MO'}

test['Country'] = np.where(test['State'].isin(us_state_abbrev.values()), "USA", test['Country'])

Out[143]:
  State Country
0    MO     USA
1    IA     USA
2    MI     USA
3    AB  Canada
4    ON  Canada

如果您只有两个选项是“美国”或“加拿大”,因此您可以确保在多个国家/地区中没有出现含糊不清的州缩写,那么使用
map()
是非常合适的。至于你的具体语法错误:如果你发布一个复制你的错误的代码的工作示例,你会得到更好的响应,不要让我们猜测你的数据帧中有什么。谢谢@Jewly,但是使用state_abbrev字典,而不是创建一个全新的{state:USA}字典,难道不应该有更简单的方法吗?为了澄清,我将编辑问题以显示test.head()