如何以最Pythonic的方式将Pandas Series映射到列表(非字典)
更Pythonic的Pandas索引映射方案
当然有,给你几种不用字典、不用lambda的简洁实现:
1. 用numpy的take函数(最快最直接)
直接利用numpy的索引提取能力,效率拉满:
import pandas as pd import numpy as np df = pd.Series([0,1,2,3]) dx = ['a','b', 'c','d'] # 用df里的数值作为索引,提取dx中的元素 result = pd.Series(np.take(dx, df))
2. 借助列表的__getitem__方法配合map
列表的索引操作本质是调用__getitem__方法,直接把这个方法传给map就行,省去lambda:
df = pd.Series([0,1,2,3]) dx = ['a','b', 'c','d'] result = df.map(dx.__getitem__)
3. 用replace自动生成映射字典
如果你的索引是从0开始的连续整数,replace可以配合enumerate自动生成映射字典,比手动写字典省事:
df = pd.Series([0,1,2,3]) dx = ['a','b', 'c','d'] result = df.replace(dict(enumerate(dx)))
效率对比
- 大数据量下优先选
np.take,numpy底层实现速度最快; - 小数据量用
map(__getitem__)足够简洁; replace适合需要处理非连续索引的场景。
内容的提问来源于stack exchange,提问作者pybynumbers
相关产品推荐
相关产品推荐

