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



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

我想做的是比较两者并从与a2.xlsx列名匹配的a1.xlsx中提取 A 和 B 的值,并将值复制到 a2.xlsx 中的 C 列和 D 列。我知道如何使用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 加载到 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感兴趣,我们执行左合并,因为如果我们执行默认的合并类型为"inner",那么这将与原始 df 不一致,即值将移动到 df 的顶部。

相关内容

最新更新