在R语言中按Parent分组聚合计算数值占比
原始数据集
| Parent | Type | Value |
|---|---|---|
| A | blue | 35 |
| A | red | 65 |
| B | blue | 23 |
| C | blue | 22 |
| C | blue | 35 |
| C | yellow | 3 |
实现方法
1. Excel 操作步骤
- 计算每个Parent的总Value:在空白列(如D列)D2单元格输入公式
=SUMIF($A:$A,A2,$C:$C),下拉填充至所有行,得到每行对应Parent的总Value。 - 生成百分比列:新增列命名为
value percentage(如E列),E2单元格输入公式=C2/D2,设置单元格格式为百分比(按需保留小数位),下拉填充即可。
2. Python pandas 实现
import pandas as pd # 构造数据集 data = { 'Parent': ['A', 'A', 'B', 'C', 'C', 'C'], 'Type': ['blue', 'red', 'blue', 'blue', 'blue', 'yellow'], 'Value': [35, 65, 23, 22, 35, 3] } df = pd.DataFrame(data) # 计算每个Parent的总Value并匹配到对应行 df['parent_total'] = df.groupby('Parent')['Value'].transform('sum') # 计算百分比并格式化 df['value percentage'] = (df['Value'] / df['parent_total']).apply(lambda x: f"{x:.2%}") # 可选:删除中间计算列 # df = df.drop('parent_total', axis=1) print(df)
3. SQL 实现(假设表名为parent_data)
SELECT Parent, Type, Value, ROUND((Value / SUM(Value) OVER (PARTITION BY Parent)) * 100, 2) AS `value percentage` FROM parent_data;
内容的提问来源于stack exchange,提问作者PCRL
相关产品推荐
相关产品推荐

