鱼C论坛

 找回密码
 立即注册
查看: 3168|回复: 7

[已解决]如何关联两个excel表,并进行合并和计算

[复制链接]
发表于 2023-2-23 22:26:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大神们,现在遇到这样一个需求,想在python中实现效果,不知道该如何处理,请大神们帮忙看看。
需求:
       一个工作簿中有“成本”、“产品”两个工作表,其中“成本”工作表是每个产品型号的成本明细,“产品”工作表是每个产品型号对应生产订单的数量,现在想在python中,把产品表中每个订单都把成本明细带出来并与订单数量进行相乘,子厚得出一个汇总表。

微信截图_20230223221959.png

成本分析.rar (13.37 KB, 下载次数: 4)
最佳答案
2023-2-23 22:42:06
你可以使用pandas库来实现这个需求。具体步骤如下:

读取Excel文件中的“成本”和“产品”工作表,转换成pandas的DataFrame格式。
可以使用pandas.read_excel方法来读取Excel文件中的工作表,指定sheet_name参数为工作表名称,然后将返回的数据转换成DataFrame格式。

对“成本”工作表按照产品型号进行分组,然后将每个产品型号的成本明细进行合并。
可以使用groupby方法对DataFrame按照“产品型号”进行分组,然后使用agg方法将成本明细进行合并。

将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细。
可以使用merge方法将“产品”工作表和“成本”工作表按照“产品型号”进行合并,得到每个订单对应的成本明细。

将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本。
可以将“成本”和“产品”工作表合并之后,使用pandas的算术运算来计算每个订单的总成本。

对汇总表按照需要的格式进行整理,输出到Excel文件中。
可以使用pandas的数据处理方法,如重命名列名、删除不需要的列等操作来整理汇总表,然后使用to_excel方法将汇总表输出到Excel文件中。

下面是代码示例:


  1. import pandas as pd

  2. # 读取“成本”和“产品”工作表
  3. df_cost = pd.read_excel('workbook.xlsx', sheet_name='成本')
  4. df_product = pd.read_excel('workbook.xlsx', sheet_name='产品')

  5. # 对“成本”工作表按照产品型号进行分组,将成本明细进行合并
  6. df_cost_grouped = df_cost.groupby('产品型号').agg({'成本明细': 'sum'})

  7. # 将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细
  8. df_merged = pd.merge(df_product, df_cost_grouped, on='产品型号', how='left')

  9. # 将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本
  10. df_merged['总成本'] = df_merged['数量'] * df_merged['成本明细']

  11. # 整理汇总表的格式,输出到Excel文件中
  12. df_summary = df_merged[['订单号', '产品型号', '数量', '总成本']]
  13. df_summary.columns = ['订单号', '产品型号', '订单数量', '订单总成本']
  14. df_summary.to_excel('汇总表.xlsx', index=False)
复制代码

这样,就可以实现你的需求了。希望对你有帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-23 22:42:06 | 显示全部楼层    本楼为最佳答案   
你可以使用pandas库来实现这个需求。具体步骤如下:

读取Excel文件中的“成本”和“产品”工作表,转换成pandas的DataFrame格式。
可以使用pandas.read_excel方法来读取Excel文件中的工作表,指定sheet_name参数为工作表名称,然后将返回的数据转换成DataFrame格式。

对“成本”工作表按照产品型号进行分组,然后将每个产品型号的成本明细进行合并。
可以使用groupby方法对DataFrame按照“产品型号”进行分组,然后使用agg方法将成本明细进行合并。

将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细。
可以使用merge方法将“产品”工作表和“成本”工作表按照“产品型号”进行合并,得到每个订单对应的成本明细。

将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本。
可以将“成本”和“产品”工作表合并之后,使用pandas的算术运算来计算每个订单的总成本。

对汇总表按照需要的格式进行整理,输出到Excel文件中。
可以使用pandas的数据处理方法,如重命名列名、删除不需要的列等操作来整理汇总表,然后使用to_excel方法将汇总表输出到Excel文件中。

下面是代码示例:


  1. import pandas as pd

  2. # 读取“成本”和“产品”工作表
  3. df_cost = pd.read_excel('workbook.xlsx', sheet_name='成本')
  4. df_product = pd.read_excel('workbook.xlsx', sheet_name='产品')

  5. # 对“成本”工作表按照产品型号进行分组,将成本明细进行合并
  6. df_cost_grouped = df_cost.groupby('产品型号').agg({'成本明细': 'sum'})

  7. # 将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细
  8. df_merged = pd.merge(df_product, df_cost_grouped, on='产品型号', how='left')

  9. # 将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本
  10. df_merged['总成本'] = df_merged['数量'] * df_merged['成本明细']

  11. # 整理汇总表的格式,输出到Excel文件中
  12. df_summary = df_merged[['订单号', '产品型号', '数量', '总成本']]
  13. df_summary.columns = ['订单号', '产品型号', '订单数量', '订单总成本']
  14. df_summary.to_excel('汇总表.xlsx', index=False)
复制代码

这样,就可以实现你的需求了。希望对你有帮助

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
fanevon + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 10:45:30 | 显示全部楼层
isdkz 发表于 2023-2-23 22:42
你可以使用pandas库来实现这个需求。具体步骤如下:

读取Excel文件中的“成本”和“产品”工作表,转换 ...

大佬,这个错误什么意思呢?
微信截图_20230224104458.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-24 11:31:38 | 显示全部楼层
fanevon 发表于 2023-2-24 10:45
大佬,这个错误什么意思呢?

这只是参考代码,你要根据你的文件来改,你的文件没有产品型号这一列,

你把它改成商品编号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 14:56:21 | 显示全部楼层
isdkz 发表于 2023-2-24 11:31
这只是参考代码,你要根据你的文件来改,你的文件没有产品型号这一列,

你把它改成商品编号

大佬,下午好。
# 对“成本”工作表按照产品型号进行分组,将成本明细进行合并
df_cost_grouped = df_cost.groupby('产品型号').agg({'成本明细': 'sum'})   这里面groupby函数是成本表中的按型号进行分组, sum方法是 把成本A至成本F六列数据求和得到一个总成本吧?   但是我想要的是把六列数据分别按型号进行排列,如图。
微信截图_20230224145551.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 17:30:35 | 显示全部楼层
  1. import pandas as pd
  2. # 读取“成本”和“产品”工作表
  3. df_cost = pd.read_excel('成本分析.xlsx', sheet_name='成本')
  4. df_product = pd.read_excel('成本分析.xlsx', sheet_name='产品')
  5. print(df_cost)
  6. # 将“成本”工作表中的数据,将列数据为行数据—— “宽变高”
  7. df_cost_melt = pd.melt(df_cost,id_vars=["产品型号"],
  8.                        value_vars=["成本A", "成本B", "成本C", "成本D", "成本E", "成本F"],
  9.                        var_name='成本类别',
  10.                        value_name ="成本单价"
  11.                         )
  12. print(df_cost_melt)
  13. # 将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细
  14. df_merged = pd.merge(df_product, df_cost_melt, on='产品型号', how='left')
  15. print(df_merged)
  16. # 将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本
  17. df_merged['成本金额'] = df_merged['生产数量'] * df_merged['成本单价']
  18. print(df_merged)
  19. # 整理汇总表的格式,输出到Excel文件中
  20. df_summary = df_merged[['产品型号', '订单编号', '生产数量', '成本类别', '成本单价', '成本金额']]
  21. df_summary.columns = ['产品型号', '订单编号', '生产数量', '成本类别', '成本单价', '成本金额']
  22. df_summary.to_excel('成本汇总表.xlsx', index=False)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 17:30:55 | 显示全部楼层
isdkz 发表于 2023-2-24 11:31
这只是参考代码,你要根据你的文件来改,你的文件没有产品型号这一列,

你把它改成商品编号

感谢大佬提供的思路,已顺利解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-24 20:50:45 | 显示全部楼层
请及时结帖(将解决问题的楼层设为 "最佳答案")
言外之意:isdkz 怎么又是你(悲)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表