基于另一个数据帧的索引替换所有列值

2024-05-23 14:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个df列的值映射到另一个df列的值。你知道吗

第一个数据框包含足球比赛结果:

Date|HomeTeam|AwayTeam

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

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

TeamName

Arsenal
Bournetmouth
Chelsea

最终的结果是第一个df与比赛,但与球队的名字,而不是数字在“主队”和“AwayTeam”。第一个df中的数字表示第二个df的索引。你知道吗

我试过“.replace”:

for item in matches.HomeTeam:
    matches = matches.replace(to_replace = matches.HomeTeam[item], value=teams.TeamName[item])

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

请让我知道我做错了什么,以及如何解决这个问题。谢谢!你知道吗


Tags: 数据dfdate数字团队itemreplacearsenal
2条回答

可以尝试使用applymap

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

现在:

print(df)

输出将如预期的那样。你知道吗

我假设teams也是一个数据帧,类似于:

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

相关问题 更多 >