如何在Pandas中按条件将另一DataFrame的值映射为新列
为DataFrame主客场球队添加对应评级列
可以通过**映射(map)或合并(merge)**两种方式实现需求,以下是具体代码:
方法一:使用map快速映射(推荐)
先将ratings转换为以球队名为索引的Series,再直接映射到fixtures的主客场列:
import pandas as pd # 原始数据 fixtures = pd.DataFrame( {'HomeTeam': ["A", "B", "C", "D"], 'AwayTeam': ["E", "F", "G", "H"]}) ratings = pd.DataFrame({'team': ["A", "B", "C", "D", "E", "F", "G", "H"], "rating": [ "1,5", "0,2", "0,5", "2", "3", "4,8", "0,9", "-0,4"]}) # 创建球队-评级的映射Series rating_map = ratings.set_index('team')['rating'] # 添加主客场评级列 fixtures['HomeTeamRating'] = fixtures['HomeTeam'].map(rating_map) fixtures['AwayTeamRating'] = fixtures['AwayTeam'].map(rating_map) # 查看结果 print(fixtures)
输出结果:
HomeTeam AwayTeam HomeTeamRating AwayTeamRating 0 A E 1,5 3 1 B F 0,2 4,8 2 C G 0,5 0,9 3 D H 2 -0,4
方法二:使用merge合并数据
通过两次合并分别关联主客场的评级:
# 合并主队评级 fixtures = fixtures.merge( ratings.rename(columns={'team':'HomeTeam', 'rating':'HomeTeamRating'}), on='HomeTeam' ) # 合并客队评级 fixtures = fixtures.merge( ratings.rename(columns={'team':'AwayTeam', 'rating':'AwayTeamRating'}), on='AwayTeam' )
可选:将评级转换为数值类型
如果需要后续计算,可先将字符串格式的评级转换为浮点型:
ratings['rating'] = ratings['rating'].str.replace(',', '.').astype(float)
再执行上述映射/合并操作,得到的评级列会是数值类型。
内容的提问来源于stack exchange,提问作者Robin Reiche
相关产品推荐
相关产品推荐

