Pandas按百分比拆分两个DataFrame公共成本的实现方法咨询
Pandas公共成本拆分实现方案
核心思路
- 将宽表格式的占比数据df1转换为长表,统一和df2的Account维度匹配
- 关联两个表的公共成本字段后,用
占比 * 对应账户公共成本计算拆分后每个产品的成本 - 按需调整字段格式、排序得到最终结果
完整实现代码
首先构造示例数据(你本地已有数据可跳过这一步):
import pandas as pd # 构造示例df1 df1 = pd.DataFrame({ 'Product': ['prod1', 'prod2'], 'AU-MGT': [20, 80], 'AU-STG': [60, 40], 'AU-PRD': [70, 30] }) # 构造示例df2 df2 = pd.DataFrame({ 'Account': ['AU-MGT', 'AU-STG', 'AU-PRD'], 'Product': ['COMMON', 'COMMON', 'COMMON'], 'cost': [4, 6, 8] })
核心处理逻辑:
# df1转长表,同时把百分比转换为小数 df1_long = df1.melt(id_vars='Product', var_name='Account', value_name='ratio') df1_long['ratio'] = df1_long['ratio'] / 100 # 关联df2的公共成本数据 merged = df1_long.merge(df2[['Account', 'cost']], on='Account', how='left') # 计算拆分后成本 merged['cost'] = merged['ratio'] * merged['cost'] # 可选:如果需要将prod1调整为prod-1格式,打开下面注释 # merged['Product'] = merged['Product'].str.replace('prod', 'prod-') # 按Account排序,输出指定字段 result = merged[['Account', 'Product', 'cost']].sort_values('Account').reset_index(drop=True) print(result)
输出结果
Account Product cost 0 AU-MGT prod1 0.8 1 AU-MGT prod2 3.2 2 AU-STG prod1 3.6 3 AU-STG prod2 2.4 4 AU-PRD prod1 5.6 5 AU-PRD prod2 2.4
内容的提问来源于stack exchange,提问作者Dcook
相关产品推荐
相关产品推荐

