鱼C论坛

 找回密码
 立即注册
查看: 2549|回复: 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文件中。

下面是代码示例:

import pandas as pd

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

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

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

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

# 整理汇总表的格式,输出到Excel文件中
df_summary = df_merged[['订单号', '产品型号', '数量', '总成本']]
df_summary.columns = ['订单号', '产品型号', '订单数量', '订单总成本']
df_summary.to_excel('汇总表.xlsx', index=False)
这样,就可以实现你的需求了。希望对你有帮助
想知道小甲鱼最近在做啥?请访问 -> 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文件中。

下面是代码示例:

import pandas as pd

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

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

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

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

# 整理汇总表的格式,输出到Excel文件中
df_summary = df_merged[['订单号', '产品型号', '数量', '总成本']]
df_summary.columns = ['订单号', '产品型号', '订单数量', '订单总成本']
df_summary.to_excel('汇总表.xlsx', index=False)
这样,就可以实现你的需求了。希望对你有帮助

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

大佬,这个错误什么意思呢?
微信截图_20230224104458.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

你把它改成商品编号
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-24 17:30:35 | 显示全部楼层
import pandas as pd
# 读取“成本”和“产品”工作表
df_cost = pd.read_excel('成本分析.xlsx', sheet_name='成本')
df_product = pd.read_excel('成本分析.xlsx', sheet_name='产品')
print(df_cost)
# 将“成本”工作表中的数据,将列数据为行数据—— “宽变高”
df_cost_melt = pd.melt(df_cost,id_vars=["产品型号"],
                       value_vars=["成本A", "成本B", "成本C", "成本D", "成本E", "成本F"],
                       var_name='成本类别',
                       value_name ="成本单价"
                        )
print(df_cost_melt)
# 将“产品”工作表和“成本”工作表合并,按照“产品型号”进行合并,得到每个订单对应的成本明细
df_merged = pd.merge(df_product, df_cost_melt, on='产品型号', how='left')
print(df_merged)
# 将每个订单对应的成本明细和订单数量相乘,得到每个订单的总成本
df_merged['成本金额'] = df_merged['生产数量'] * df_merged['成本单价']
print(df_merged)
# 整理汇总表的格式,输出到Excel文件中
df_summary = df_merged[['产品型号', '订单编号', '生产数量', '成本类别', '成本单价', '成本金额']]
df_summary.columns = ['产品型号', '订单编号', '生产数量', '成本类别', '成本单价', '成本金额']
df_summary.to_excel('成本汇总表.xlsx', index=False)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你把它改成商品编号

感谢大佬提供的思路,已顺利解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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