Pandas根据其他数据帧的数据有条件地选择列值

时间:2016-12-04 23:52:40

标签: python pandas

有没有办法可以根据第一个数据框中的某些条件从另一个数据框中的不同列中选择值来在数据框中创建新列?

我的数据集如下:

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])

提前谢谢!

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