У меня есть датафрейм с серией штатов и страной. Ряд стран имеет несколько пропущенных значений. У меня есть словарь штатов США, который я использовал для очистки серии Штаты. Я хочу использовать это, чтобы сказать, что если государство находится в словаре, то страна должна быть США.
Я могу использовать словарь состояний, сопоставленный с США, т. Е. {'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: Истинное значение Series является неоднозначным. Используйте a.empty, a.bool (), a.item (), a.any () или a.all (). Почему это так?