我正在尝试运行if语句,以将马拉松比赛获胜者的原籍国与他们所在国家的gdp数据进行匹配。我收到错误消息“只能比较标记相同的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分配gdp值(我仅包括部分数据,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


如何创建“正确答案”列?

最佳答案

我不太确定您要问的内容,但我认为您正在尝试创建与Year列匹配的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

07-26 07:53