You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计DataFrame中父节点子节点数(含未出现节点显示0)

如何统计父节点的子节点数(包含未出现节点的0值)

嗨,我来帮你解决这个问题!你想要统计1到10628的连续id序列中每个父节点的子节点数量,包括那些没出现在原DataFrame里的节点(子节点数为0),对吧?其实用不到split()函数,我们可以用pandas的分组和连接操作来轻松实现,具体步骤如下:

步骤1:统计原数据中已有父节点的子节点数

首先,我们对原DataFrame按id分组,统计每个组的行数(也就是子节点的数量):

import pandas as pd

# 假设你的原DataFrame是df
child_count = df.groupby('id').size().reset_index(name='id_child')

这一步会得到一个新的DataFrame,包含所有在原数据中出现过的id,以及对应的子节点数量。

步骤2:创建完整的连续id序列

因为你的id范围是1到10628的连续值,我们可以用pd.RangeIndex生成这个完整序列,再转成DataFrame:

full_ids = pd.DataFrame({'id': pd.RangeIndex(start=1, stop=10629)})

这里stop=10629是因为RangeIndex的结束值是开区间,这样才能包含10628这个最大值。

步骤3:合并数据并填充0值

最后,我们把完整id序列和之前统计的子节点数做左连接,然后把缺失的子节点数填充为0:

nb_children = full_ids.merge(child_count, on='id', how='left').fillna({'id_child': 0})
# 把id_child列转成整数类型(可选,因为填充后默认是浮点数)
nb_children['id_child'] = nb_children['id_child'].astype(int)

这样得到的nb_children就是你想要的结果:包含1到10628的所有id,每个id对应的子节点数,未出现的id对应的子节点数为0。

举个例子,用你给出的小数据集测试:
原df:

idid_child
11
12
13
21
41
42

执行上述代码后(把stop改成5,因为示例id范围是1到4),得到的nb_children就是:

idid_child
13
21
30
42

完全符合你的预期!

内容的提问来源于stack exchange,提问作者Emeline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:52:34