Может сравнивать только идентично помеченные ошибки объектов Series с оператором if - Python - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь выполнить оператор if, чтобы сопоставить страну происхождения победителей марафона с данными их счетчика ie. Я получаю сообщение об ошибке «Можно сравнивать только идентичные объекты Series».

if df['Winner Country'] ==  gdp_data['Country']:

    if df['YEAR'] == 1970 :

        df['gdp'] = gdp_data['1970 gdp/cap'] 

Пример gdp_data:

Country 1970 gdp/cap    
Kenya   98  

Пример df:

YEAR    Winner_Name Winner_Country  Time    Gender  
1977    Dan Cloeter USA             2:17:52 M   

Я намереваюсь назначить значение ВВП для df на основе как страны, так и года (I только включенные частичные данные, для каждого года в столбце данных gdp_data есть дополнительные столбцы).

Если я решу объединиться, я столкнусь с этой проблемой:

пример данных:

YEAR    Winner_Name    Winner_Country   Time    Gender  Marathon_City   Country 1970    1971     
1977    Dan Cloeter    USA              2:17:52 M       Chicago         USA     5247.0  5687.0  
1978    Mark Stanforth USA              2:19:20 M       Chicago         USA     5247.0  5687.0

как видно, число 1970 является переменной, но также является возможным результатом для года. Как я могу создать переменную gdp на основе года, в котором произошла гонка?

Что я изначально пытался:

YEAR = df_gdp['YEAR']
df_gdp['gdp'] = df[YEAR]

, что привело к этой ошибке

KeyError: "Ни один из [ Int64Index ([1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, \ n ... \ n 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2017, 2018, 2019] , \ n dtype = 'int64', length = 258)] в [столбцах] "

- упрощенный пример желаемых результатов

Возьмите этот пример набора данных

letter a b c d
a      1 3 4 2  
b      4 3 2 1 
c      2 1 4 3
d      3 4 2 1

желаемых результатов

letter a b c d  correct answer
a      1 3 4 2  1  
b      4 3 2 1  3 
c      2 1 4 3  4
d      3 4 2 1  1

как создать столбец «правильный ответ»?

1 Ответ

0 голосов
/ 28 января 2020

Я не совсем уверен, что вы спрашиваете, но я думаю, что вы пытаетесь создать столбец gdp, который совпадает со столбцом года.

Если это так, я думаю, что это должно работать.

df_gdp['gdp'] = df_gdp.apply(lambda x: x.loc[(x['YEAR'])], axis=1)



Вот как я это проверил.

##create test data
import numpy as np
test = pd.DataFrame(np.random.randint(1000,10000,(20,20)),columns = np.arange(1970,1990))
test['YEAR'] = np.arange(1970,1990)
test['gdp'] = test.apply(lambda x: x.loc[(x['YEAR'])],axis=1)
print(test[[1970,1971,1972,1973,1974,'YEAR','gdp']].head())

   1970  1971  1972  1973  1974  YEAR   gdp
0  4436  1288  5956  5861  2361  1970  4436
1  8918  5311  9889  2356  4646  1971  5311
2  1129  2582  6304  8488  3783  1972  6304
3  3767  8178  3947  3098  9508  1973  3098
4  7710  7713  5186  3894  9692  1974  9692
...