如何将子产品(行)汇总合并至对应主产品(单行)
需求:子产品数据汇总至对应主产品行
需要将多行子产品(voucher类型)数据合并到对应主产品(main类型)的单行中,核心是按Package Code分组,汇总同组内子产品的VoucherFaveValue总和,替换主产品行的对应字段为VoucherTotalValue。
原始数据
| Product Code | Product Name | Package Code | RowType | Price | Usage | Revenue | VoucherFaveValue |
|---|---|---|---|---|---|---|---|
| GA-ADT | uss-ga-adult | ADUMR-SGR | main | 10 | 2 | 20 | 0 |
| mvCH5 | meal voucher | ADUMR-SGR | voucher | 0 | 0 | 0 | 5 |
| rvCH5 | retail voucher | ADUMR-SGR | voucher | 0 | 0 | 0 | 5 |
| GA-chd | uss-ga-child | CHUMR | main | 7 | 2 | 14 | 0 |
| mvCH5 | meal voucher | CHUMR | voucher | 0 | 0 | 0 | 5 |
| rvCH5 | retailvoucher | CHUMR | voucher | 0 | 0 | 0 | 5 |
目标数据
| Product Code | Product Name | Package Code | RowType | Price | Usage | Revenue | VoucherTotalValue |
|---|---|---|---|---|---|---|---|
| GA-ADT | uss-ga-adult | ADUMR-SGR | main | 10 | 2 | 20 | 10 |
| GA-chd | uss-ga-child | CHUMR | main | 7 | 2 | 14 | 10 |
实现方案
方案1:Excel Power Query
- 导入数据到Power Query编辑器
- 按
Package Code分组,计算VoucherFaveValue的总和,命名为VoucherTotalValue - 筛选原始数据中
RowType为main的行 - 将分组后的汇总表与筛选后的主产品表按
Package Code合并 - 删除多余的
VoucherFaveValue列,调整列顺序后加载回Excel
方案2:Python pandas
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Product Code': ['GA-ADT', 'mvCH5', 'rvCH5', 'GA-chd', 'mvCH5', 'rvCH5'], 'Product Name': ['uss-ga-adult', 'meal voucher', 'retail voucher', 'uss-ga-child', 'meal voucher', 'retailvoucher'], 'Package Code': ['ADUMR-SGR', 'ADUMR-SGR', 'ADUMR-SGR', 'CHUMR', 'CHUMR', 'CHUMR'], 'RowType': ['main', 'voucher', 'voucher', 'main', 'voucher', 'voucher'], 'Price': [10, 0, 0, 7, 0, 0], 'Usage': [2, 0, 0, 2, 0, 0], 'Revenue': [20, 0, 0, 14, 0, 0], 'VoucherFaveValue': [0, 5, 5, 0, 5, 5] }) # 按Package Code汇总子产品的券值总和 voucher_totals = df[df['RowType'] == 'voucher'].groupby('Package Code')['VoucherFaveValue'].sum().reset_index(name='VoucherTotalValue') # 筛选主产品行并合并汇总数据 result = df[df['RowType'] == 'main'].merge(voucher_totals, on='Package Code').drop('VoucherFaveValue', axis=1) # 调整列顺序(与目标数据对齐) result = result[['Product Code', 'Product Name', 'Package Code', 'RowType', 'Price', 'Usage', 'Revenue', 'VoucherTotalValue']] print(result)
内容的提问来源于stack exchange,提问作者Tatiana Blanco
相关产品推荐
相关产品推荐

