使用 Pandas 合并 Excel 数据:按工序和物料编码分组、合并重复行并计算总面积
您可以使用 Pandas 库来实现这个需求。首先,您可以使用read_excel()函数读取原始 Excel 文件,并将其分为两个数据框,一个用于 PS 工序,另一个用于 SS 工序。然后,您可以按照要求对每个数据框进行处理,并将它们保存到不同的工作表中。\n\n以下是一个可能的实现方法:\n\npython\nimport pandas as pd\n\n# 读取原始 Excel 文件\ndf = pd.read_excel('原始文件.xlsx')\n\n# 拆分数据框为 PS 工序和 SS 工序\ndf_ps = df[df['工序'] == 'PS']\ndf_ss = df[df['工序'] == 'SS']\n\n# 对 PS 工序进行处理\ndf_ps['位置'] = df_ps.groupby(['工序', '物料编码PS'])['位置'].transform(lambda x: ','.join(x.unique()))\ndf_ps['PS面积'] = df_ps.groupby(['工序', '物料编码PS'])['PS面积'].transform('sum')\ndf_ps['物料描述PS'] = df_ps.groupby(['工序', '物料编码PS'])['物料描述PS'].transform(lambda x: ','.join(x.unique()))\ndf_ps['工序'] = 'PS工序'\ndf_ps['位置'] = 'PS位置'\n\n# 对 SS 工序进行处理\ndf_ss['位置'] = df_ss.groupby(['工序', '物料编码SS'])['位置'].transform(lambda x: ','.join(x.unique()))\ndf_ss['SS面积'] = df_ss.groupby(['工序', '物料编码SS'])['SS面积'].transform('sum')\ndf_ss['物料描述SS'] = df_ss.groupby(['工序', '物料编码SS'])['物料描述SS'].transform(lambda x: ','.join(x.unique()))\ndf_ss['工序'] = 'SS工序'\ndf_ss['位置'] = 'SS位置'\n\n# 创建新的 Excel 文件\nwith pd.ExcelWriter('新文件.xlsx') as writer:\n # 将 PS 工序保存到工作簿 1\n df_ps.to_excel(writer, sheet_name='PS工序', index=False)\n \n # 将 SS 工序保存到工作簿 2\n df_ss.to_excel(writer, sheet_name='SS工序', index=False)\n\n# 重新读取新的 Excel 文件\ndf_new = pd.read_excel('新文件.xlsx', sheet_name=None)\n\n# 获取 PS 工作簿和 SS 工作簿数据框\ndf_ps_new = df_new['PS工序']\ndf_ss_new = df_new['SS工序']\n\n# 合并 PS 工序和 SS 工序\ndf_merged = pd.merge(df_ps_new, df_ss_new, left_on=['PS工序', '物料编码PS'], right_on=['SS工序', '物料编码SS'], how='outer')\ndf_merged['PS面积'] = df_merged['PS面积'].fillna(0) + df_merged['SS面积'].fillna(0)\ndf_merged['物料描述'] = df_merged.apply(lambda x: ','.join(set(filter(None, [x['物料描述PS'], x['物料描述SS']]))), axis=1)\ndf_merged['位置'] = df_merged.apply(lambda x: ','.join(set(filter(None, [x['位置_x'], x['位置_y']]))), axis=1)\ndf_merged = df_merged.drop(['位置_x', '位置_y', 'SS面积', 'SS工序', '物料编码SS', '物料描述PS', '物料描述SS'], axis=1)\ndf_merged = df_merged.rename(columns={'PS工序': '工序'})\n\n# 保存合并后的数据到新的 Excel 文件\nwith pd.ExcelWriter('新文件.xlsx', mode='a') as writer:\n df_merged.to_excel(writer, sheet_name='合并结果', index=False)\n\n\n请注意,上述代码假设原始文件的第一个工作表包含了要处理的数据。如果您的数据位于其他工作表中,请相应地修改代码中的读取和保存步骤。\n\n此外,上述代码使用了groupby函数来处理相同工序和物料编码的行,并应用了不同的聚合函数,如transform和sum。最后,merge函数用于合并 PS 工序和 SS 工序的结果,并根据条件进行计算和重命名列名。\n\n请确保您已安装了 Pandas 库,并将代码中的文件路径替换为您的实际文件路径。
原文地址: https://www.cveoy.top/t/topic/niaL 著作权归作者所有。请勿转载和采集!