Pandas从其他数据帧复制值

时间:2015-05-29 11:44:07

标签: python pandas

Pandas dataframe 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转换为字典并使用替换方法,但它也不能说服我。

2 个答案:

答案 0 :(得分:5)

您可以使用pd.merge()

In [149]: df1.merge(df2, on='A')
Out[149]:
   A  B
0  a  2
1  a  2
2  b  3

文档:pandas.DataFrame.merge()

答案 1 :(得分:2)

有一个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优化并且不需要像{{那样多的检查3}}