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

如何为pandas的friends DataFrame添加everyone中对应名称的索引列?

解决方法:用Series映射快速匹配索引

刚好有个非常简洁高效的pandas方法能满足你的需求,完全不用写慢的apply或者担心顺序被打乱!

首先先纠正下你代码里的小拼写错误:pd.dataframe要改成大写的pd.DataFrame,不然运行会报错哦。

核心思路

我们可以先创建一个名字到everyone索引的映射关系,然后直接用这个映射给friends添加新列,全程是向量化操作,速度快还能完美保留friends的原顺序。

完整代码示例

import pandas as pd

# 纠正拼写错误后的DataFrame创建
friends = pd.DataFrame({ 'name' : ['Alice', 'Jim', 'Edward'], })
everyone = pd.DataFrame({ 'name' : ['Edward', 'Conrad', 'Lucy', 'Jim', 'Frank', 'Alice', 'Sam'] })

# 1. 创建名字到everyone索引的映射Series
name_to_everyone_idx = pd.Series(everyone.index, index=everyone['name'])

# 2. 用map方法给friends添加everyone_id列
friends['everyone_id'] = friends['name'].map(name_to_everyone_idx)

print(friends)

运行后输出的结果完全符合你的预期:

name  everyone_id
0   Alice            5
1     Jim            3
2  Edward            0

为什么这个方法更好?

  • 保留原顺序:不像你之前尝试的merge方法会打乱friends的原有排序,map会严格按照friends中name的顺序去匹配对应的索引。
  • 高效快速:这是pandas的向量化操作,比循环或者apply这种逐行处理的方法效率高得多,数据量大的时候差距会很明显。
  • 代码简洁:两行核心代码就搞定,逻辑清晰易懂。

如果你担心有名字不在everyone里的情况,可以给map加个na_action='ignore'参数,或者用fillna来处理缺失值,比如:

friends['everyone_id'] = friends['name'].map(name_to_everyone_idx).fillna(-1).astype(int)

这样不存在的名字会被标记为-1,避免出现NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:36