如何在Pandas DataFrame中匹配元组列表列并追加对应Score
最优解法:给DataFrame的marks列元组追加匹配的Score值
需求说明
需要将DataFrame中marks列内的每个元组,根据元组第一个元素与Name列的匹配关系,把对应行的Score值追加到该元组末尾。
示例DataFrame
import pandas as pd df = pd.DataFrame({ 'Name': ['Nik', 'Kate', 'Evan', 'Naik'], 'Age': [33, 34, 43, 44], 'Score': [90, 95, 93, 92], 'marks': [ [('Nik', 100), ('Naik', 85)], [('Kate', 100)], [('Evan', 100)], [('Nik', 77), ('Naik', 100)], ] })
最优实现步骤
- 构建快速查找的映射字典:把
Name和Score列转为字典,利用字典O(1)的查找效率提升处理速度。 - 批量处理marks列:用
apply结合列表推导式,遍历每个元组并追加对应的Score值。
完整代码
# 构建Name到Score的映射字典 name_score_map = df.set_index('Name')['Score'].to_dict() # 处理marks列,生成新列或替换原列 df['marks_updated'] = df['marks'].apply( lambda lst: [(name, val, name_score_map[name]) for name, val in lst] ) # 查看结果 print(df[['Name', 'marks', 'marks_updated']])
输出结果
| Name | marks | marks_updated | |
|---|---|---|---|
| 0 | Nik | [('Nik', 100), ('Naik', 85)] | [('Nik', 100, 90), ('Naik', 85, 92)] |
| 1 | Kate | [('Kate', 100)] | [('Kate', 100, 95)] |
| 2 | Evan | [('Evan', 100)] | [('Evan', 100, 93)] |
| 3 | Naik | [('Nik', 77), ('Naik', 100)] | [('Nik', 77, 90), ('Naik', 100, 92)] |
内容的提问来源于stack exchange,提问作者Kingston X
相关产品推荐
相关产品推荐

