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