我有这个数据帧(ID是字符串,值是浮点):

ID              Value
1               0.0
1.1             0.0
1.2             0.0
1.2.1           27508.42
1.2.2           25861.82
1.3             0.0
1.3.1           0.0
1.3.1.1         0.0
1.3.1.2         0.0
1.3.1.3         30396.25

其结构如下:

1
├── 1.1  
├── 1.2  
│   ├── 1.2.1  
│   └── 1.2.2  
└── 1.3  
    └── 1.3.1  
        ├── 1.3.1.1
        ├── 1.3.1.2    
        └── 1.3.1.3  

"父"节点的值必须是叶子的总和.所以:

ID              Value
1               83766.489    (1.1 + 1.2 + 1.3)
1.1             0.0
1.2             53370.24     (1.2.1 + 1.2.2)
1.2.1           27508.42
1.2.2           25861.82
1.3             30396.25     (1.3.1)
1.3.1           30396.25     (1.3.1.1 + 1.3.1.2 + 1.3.1.3)
1.3.1.1         0.0
1.3.1.2         0.0
1.3.1.3         30396.25

如何对ID进行分组?由于所有ID都是唯一的,所以使用groupby是行不通的.我是否应该更改数据帧的结构以更好地反映模式的逻辑?

推荐答案

另一种解决方案(假设列ID已排序):

def counter(x):
    out = []
    for id_, v in zip(x.index, x):
        s = sum(
            v
            for a, v in out
            if a.startswith(id_) and id_.count(".") == a.count(".") - 1
        )
        out.append((id_, s + v))
    return [v for _, v in out]


print(df.set_index("ID")[::-1].apply(counter)[::-1].reset_index())

输出:

        ID     Value
0        1  83766.49
1      1.1      0.00
2      1.2  53370.24
3    1.2.1  27508.42
4    1.2.2  25861.82
5      1.3  30396.25
6    1.3.1  30396.25
7  1.3.1.1      0.00
8  1.3.1.2      0.00
9  1.3.1.3  30396.25

Python相关问答推荐

在 Python 中访问 Azure Key Vault 时出现意外的关键字参数“tenant_id”

sklearn patchextractor ...缺少元素

如何使用现代 Python 重定向模块导入?

pip 和命令行的问题

如何获取html表中每一行的特定列的值?

正则表达式匹配字符串中的多个数字

在python中用浮点表示搜索和替换特定字符串

如何在混合数据类型的 Python Pandas 数据框列中仅比较日期或仅忽略秒数的日期时间?

NNC 的整数规划

根据分组列向包含特定列的比例的Pandas 数据框添加一列

Sklearn - 排列重要性导致模型中零系数的非零值

如何使用模型字典对分组的 DataFrame 进行预测并返回到原始测试 DataFrame?

将命令添加到用户输入

是否有更好的正则表达式来计算中文字母的数量并同时排除一些字符?

Pytesseract image_to_data 无法读取我图像中的数字

mypy - 如何将行标记为无法访问

动态拆分 DataFrame 的列并将其存储为新列

如何在Pandas 子集中引用self

Pandas 根据 Excel 中的条件更改字体 colored颜色 并保存到相同的 excel python

将 XML 数据展平为 pandas 数据框