有没有办法可以根据第一个数据框中的某些条件从另一个数据框中的不同列中选择值来在数据框中创建新列?
我的数据集如下:
df1 = pd.DataFrame(
[['USA', 1992],
['China', 1993],
['Japan', 1994]],
columns = ['Country', 'year'])
scores = pd.DataFrame(
[['USA', 20, 30, 40],
['China', 5, 15, 30],
['Japan', 30, 50, 40],
['Korea', 10, 15, 20],
['France', 10, 12, 15]],
columns = ['Country', 1992, 1993, 1994])
我想要的数据集是:
df = pd.DataFrame(
[['USA', 1992, 20]
['China', 1993, 15]
['Japan', 1994, 40]],
columns = ['Country', 'year', 'score'])
我尝试过使用带有lambda函数的apply但它给了我一个
KeyError: ('Country', u'occurred at index Country')
我尝试过的一行是:
df1['score'] = df.apply(lambda x: scores[scores['Country'] == x['Country']][x['year']][1])
提前谢谢!
答案 0 :(得分:0)
您可以使用Country
作为scores
DataFrame:
scores = scores.set_index(['Country'])
然后,您将能够应用函数get_score
,创建并填充具有所需值的score
列:
def get_score(row):
row['score'] = scores.loc[row['Country'], row['year']]
return row
df = df1.apply(get_score, axis=1)
这为你提供了这个输出:
Country year score
0 USA 1992 20
1 China 1993 15
2 Japan 1994 40