首页 > 解决方案 > 借助同一列数据将两个Excel工作表数据合并为一个

问题描述

Excel1
Column1     Column2         Column3
 1           A           [xyz-5536]A    
 2           B           [xyz-5537]B
 3           C           [xyz-5538]C    
 4           D           [xyz-5539]D    

这是一种具有不同项目的可追溯性报告

Excel2
Column1        Result1      Result2
[xyz-5536]A    Pass         fail
[xyz-5537]B    fail         pass    
[xyz-5538]C    pass         fail
[xyz-5539]D    fail         pass

如上所述,我有两个 excel,我想创建一个带有结果的新工作表,因为 excel1 将通过在方括号中映射 ID 来附加数据并附加 result1 和 result2

我通过宏尝试过

Column1     Column2         Column3      Result1    Result2
1            A           [xyz-5536]A     pass     fail
2            B           [xyz-5537]B     fail     pass
3            C           [xyz-5538]C     pass     fail
4            D           [xyz-5539]D     fail     pass  

它应该像上表一样。它应该一次只引用一项column3。我是 Python 新手。

标签: excelpython-3.x

解决方案


一种简单的方法是使用pandas模块。

你可以:

  • read_excel使用方法(doc)读取一个 excel 文件。你
  • 您的数据与merge方法合并(doc)
  • drop使用方法删除重复的列(doc)
  • to_excel使用方法(doc)将数据导出到新的 excel 文件

这里的代码假设你有两个 excels 文件:

# import modules
import pandas as pd

# filename
filename_1 = "Excel1.xlsx"
filename_2 = "Excel2.xlsx"

# Pandas files
df_1 = pd.read_excel(filename_1)
df_2 = pd.read_excel(filename_2)
print(df_1)
#    Column1 Column2      Column3
# 0        1       A  [xyz-5536]A
# 1        2       B  [xyz-5537]B
# 2        3       C  [xyz-5538]C
# 3        4       D  [xyz-5539]D
print(df_2)
#        Column1 Result1 Result2
# 0  [xyz-5536]A    Pass    fail
# 1  [xyz-5537]B    fail    pass
# 2  [xyz-5538]C    pass    fail
# 3  [xyz-5539]D    fail    pass

# Merge the two dataframe
df_new = df_1.merge(df_2, left_on="Column3",
                   right_on="Column1", suffixes=('', '_df2'))
print(df_new)
#    Column1 Column2      Column3  Column1_df2 Result1 Result2
# 0        1       A  [xyz-5536]  A[xyz-5536]A    Pass     fail
# 1        2       B  [xyz-5537]  B[xyz-5537]B    fail     pass
# 2        3       C  [xyz-5538]  C[xyz-5538]C    pass     fail
# 3        4       D  [xyz-5539]  D[xyz-5539]D    fail     pass

# Remove the duplicated columns
df_new = df_new.drop(["Column1_df2"], axis=1)
print(df_new)
# Column1 Column2      Column3  Result1 Result2
# 0        1       A[xyz-5536]A    Pass    fail
# 1        2       B[xyz-5537]B    fail    pass
# 2        3       C[xyz-5538]C    pass    fail
# 3        4       D[xyz-5539]D    fail    pass

# Export to a new xlsx file
df_new.to_excel("new_file.xlsx", index=False)

推荐阅读