>我有两个电子表格,行数和列数不同。
我想做的是比较两者并从与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_y
和B_y
感兴趣,我们执行左合并,因为如果我们执行默认的合并类型为"inner",那么这将与原始 df 不一致,即值将移动到 df 的顶部。