如何为树形结构Pandas DataFrame新增子节点frequency求和的新列
Pandas树形结构子节点求和问题解答
思路合理性判断
你的思路逻辑是成立的,可以得到正确结果,但存在性能缺陷:如果数据集行数较多,逐行遍历筛选的时间复杂度为O(n²),数据规模大时运行速度会很慢,更推荐使用Pandas内置向量化操作实现。
最优实现方案
核心思路是先按parent列分组统计frequency的总和,再将统计结果映射到name列,没有子节点的条目填充0即可,代码如下:
import numpy as np import pandas as pd df = pd.DataFrame({'frequency': [3,5,7,8], 'name': ['a', 'b', 'c', 'd'], 'parent': [np.nan, 'a', 'a', 'b']}) # 按父节点分组,计算所有子节点的frequency总和 child_freq_sum = df.groupby('parent')['frequency'].sum() # 将求和结果映射到对应name,无子节点的填充为0 df['sum_of_children'] = df['name'].map(child_freq_sum).fillna(0).astype(int)
运行上述代码后,输出的df和你给出的预期结果完全一致。
方案优势
- 全程使用Pandas向量化操作,时间复杂度为O(n),相比逐行筛选的实现性能提升非常明显,尤其适配大数据量场景
- 代码简洁易读,仅需两行核心逻辑即可完成需求
内容的提问来源于stack exchange,提问作者qkfsbxjayiedbe
相关产品推荐
相关产品推荐

