比较两个电子表格并提取值

时间:2015-04-09 22:50:04

标签: python excel indexing pandas match

我有两个不同行数和列数的电子表格。

我想要做的是比较两者并从a1.xlsx中提取与a2.xlsx的列名匹配的A和B的值,并将值复制到a2中的列C和D. XLSX。我知道如何使用Index-Match在excel中执行此操作,但不使用Python的Pandas。

电子表格1(a1.xlsx

Index   A   B   C
0   s   0.2 new york
1   d   1   vienna
2   g   2   london
3   c   3   tokyo
4   r   2   paris
5   d   1   berlin
6   a   8   madrid
7   f   10  seattle

电子表格2(a2.xlsx

Index   A   B   C   D
0   dublin  34  x   x
1   seoul   36  x   x
2   london  12  x   x
3   berlin  4   x   x
4   tokyo   6   x   x
5   seatte  22  x   x

1 个答案:

答案 0 :(得分:1)

假设将spreadsheet1加载到pandas df并将电子表格2加载到df1,那么您可以从merge的结果中分配值:

In [20]:

df1[['C','D']] = df1.merge(df, left_on='A', right_on='C',how='left')[['A_y','B_y']]
df1
Out[20]:
             A   B    C   D
Index                      
0       dublin  34  NaN NaN
1        seoul  36  NaN NaN
2       london  12    g   2
3       berlin   4    d   1
4        tokyo   6    c   3
5      seattle  22    f  10

只是在我们合并时解释一下,我们执行左合并,这将产生列的冲突,因为我们有列名冲突:

In [24]:

df1.merge(df, left_on='A', right_on='C',how='left')
Out[24]:
       A_x  B_x C_x  D  A_y  B_y      C_y
0   dublin   34   x  x  NaN  NaN      NaN
1    seoul   36   x  x  NaN  NaN      NaN
2   london   12   x  x    g    2   london
3   berlin    4   x  x    d    1   berlin
4    tokyo    6   x  x    c    3    tokyo
5  seattle   22   x  x    f   10  seattle

我们只对列A_yB_y感兴趣,我们执行左合并,因为如果我们执行默认的合并类型“内部”,那么这将不与原始df对齐,即这些值将转移到df的顶部。