我正在尝试运行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