根据另一个数据框的索引替换所有列值

时间:2019-05-19 09:19:50

标签: python pandas numpy

我正在尝试将一个df列的值与另一个df列的值映射。

首个df包含足球比赛结果:

$two = t

第二个df包含团队,并且只有一列:

#akabradabra
$one = 'one'

#biblibablibo
$two = 't'

$three = 'three'              #ok threer

最终结果是第一个具有匹配项但具有团队名称而不是“ HomeTeam”和“ AwayTeam”中数字的df。第一个df中的数字表示第二个df的索引。

我尝试过“ .replace”:

Date|HomeTeam|AwayTeam

2009-08-15|0|2
2009-08-15|18|15
2009-08-15|20|10

它确实替换了某些项目(约80%)的值,但忽略了其他项目。我找不到替换其他值的方法。

请让我知道我做错了什么以及如何解决。谢谢!

2 个答案:

答案 0 :(得分:0)

也许尝试使用applymap

df[['HomeTeam', 'AwayTeam']] = df[['HomeTeam', 'AwayTeam']].applymap(lambda x: teams['TeamName'].tolist()[x])

现在:

print(df)

输出将达到预期的水平。

答案 1 :(得分:0)

我假设teams也是一个DataFrame,例如:

teams = pd.DataFrame(data=[['Team_0'], ['Team_1'], ['Team_2'], ['Team_3'],
    ['Team_4'], ['Team_5'], ['Team_6'], ['Team_7'], ['Team_8'],
    ['Team_9']], columns=['TeamName'])

,但是您未能在提供的样本中包含索引(实际上,在 两个样本)。

那我的主张是:

matches.set_index('Date')\
    .applymap(lambda id: teams.loc[id, 'TeamName'])\
    .reset_index()