加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pandas从其他数据帧复制值

发布时间:2020-12-20 11:43:17 所属栏目:Python 来源:网络整理
导读:Pandas数据帧df1包含值A的列表 df1 = pd.DataFrame({'A':['a','a','b']}) A0 a1 a2 b 可以将数据帧df2视为从A中的值到B中的值的映射 df2 = pd.DataFrame({'A':['a','b'],'B':[2,3]}) A B0 a 21 b 3 我想将映射应用于df1.我的工作版本是这个,但我觉得有可能改
Pandas数据帧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转换为字典并使用替换方法,但它也不能说服我.

解决方法

这有一个 map函数,它接受一个dict或系列,后者使用索引来执行查找:

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那样进行多少检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读