熊猫数据框df1包含值列表A
df1 = pd.DataFrame({'A':['a','a','b']})
A
0 a
1 a
2 b
数据帧df2可以看作是从A中的值到B中的值的映射
df2 = pd.DataFrame({'A':['a','b'], 'B':[2,3]})
A B
0 a 2
1 b 3
我想将映射应用于df1。我拥有的工作版本就是这个版本,但是我觉得有改进的潜力,因为我发现自己的解决方案不可读,并且不确定如何将其推广到多索引
df2.set_index('A').loc[df1.set_index('A').index].reset_index()
A B
0 a 2
1 a 2
2 b 3
我也可以将df2转换为字典并使用replace方法,但是它也不能说服我。
map
为此,有一个函数可以接受字典或序列,在后者中,它使用索引来执行查找:
In [94]:
df1['A'].map(df2.set_index('A')['B'])
Out[94]:
0 2
1 2
2 3
Name: A, dtype: int64
In [93]:
%timeit df1['A'].map(df2.set_index('A')['B'])
%timeit df1.merge(df2, on='A')
1000 loops, best of 3: 718 µs per loop
1 loops, best of 3: 1.31 ms per loop
在您的测试数据map
上,速度快了将近2倍,我希望这对大型数据也是如此,因为它是经过cython优化的,并且不需要做太多检查merge
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句