【问题标题】:Compare two spreadsheets and extract the values比较两个电子表格并提取值
【发布时间】:2015-06-15 12:31:34
【问题描述】:

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

我想做的是比较两者并从a1.xlsx中提取与a2.xlsx的列名匹配的A和B的值,并将值复制到a2.xlsx中的C列和D列。我知道如何在 Excel 中使用 Index-Match 做到这一点,但不使用 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

【问题讨论】:

  • 到目前为止你有什么代码?

标签: python excel indexing pandas match


【解决方案1】:

假设电子表格 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 列感兴趣,我们执行左合并,因为如果我们执行默认合并类型“内部”,那么这将与原始df 不一致,即值将是移到df的顶部。

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多