You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)],
    ]
})

最优实现步骤

  1. 构建快速查找的映射字典:把Name和Score列转为字典,利用字典O(1)的查找效率提升处理速度。
  2. 批量处理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']])

输出结果

Namemarksmarks_updated
0Nik[('Nik', 100), ('Naik', 85)][('Nik', 100, 90), ('Naik', 85, 92)]
1Kate[('Kate', 100)][('Kate', 100, 95)]
2Evan[('Evan', 100)][('Evan', 100, 93)]
3Naik[('Nik', 77), ('Naik', 100)][('Nik', 77, 90), ('Naik', 100, 92)]

内容的提问来源于stack exchange,提问作者Kingston X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 19:52:45