python dataframe递归找出每个节点的所有父节点

本文介绍了一种使用Python Pandas库来获取数据集中每个ID及其所有父ID(PID)的方法。通过递归函数实现了从子节点追溯到根节点的过程,并展示了如何通过简单的代码实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据存储格式
pidid
Nonea
aa1
aa2
a1a11
a11a111
aa12
期望获得每个id的所有pid
代码如下:
import pandas as pd

df = pd.DataFrame(
    {
        'id': ['a', 'a1', 'a2', 'a11', 'a111', 'a12'],
        'pid': [None, 'a', 'a', 'a1', 'a11', 'a']
    }
)


# 获取id的所有父节点
def get_pid_list(df, id):
    tmp_df = df[df['id'] == id]

    if tmp_df.empty or tmp_df['pid'].values[0] is None:
        return pd.DataFrame(columns=['id', 'pid'])
    else:
        return get_pid_list(df, tmp_df['pid'].values[0]).append(tmp_df)


id_list = df['id'].values
for i in id_list:

    pid_list = get_pid_list(df, i)['pid'].values.tolist()
    print(i, pid_list)
输出结果:
a []
a1 ['a']
a2 ['a']
a11 ['a', 'a1']
a111 ['a', 'a1', 'a11']
a12 ['a']
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值