gpt4 book ai didi

python - 将 2 列数据框转换为多级分层数据框

转载 作者:行者123 更新时间:2023-12-02 18:33:54 24 4
gpt4 key购买 nike

我有一个 pandas 数据框

<表类=“s-表”><标题>来自至 <正文>一个B一个CDEFFBGBHB我GJGKLL中号中号NN

我想将其转换为多列层次结构。预期的层次结构将如下所示

<表类=“s-表”><标题>Level_1Level_2Level_3Level_4 <正文>一个BGJ一个BGK一个BH一个B我一个CDEFFLL中号中号NN

pandas 有内置的方法来实现这一点吗?我知道我可以使用递归,还有其他简化的方法吗?

最佳答案

使用networkx您可以轻松获得您所期望的内容

# Python env: pip install networkx
# Anaconda env: conda install networkx

import networkx as nx
import pandas as pd

df = pd.DataFrame({'From': ['A', 'A', 'D', 'F', 'B', 'B', 'B', 'G', 'G', 'L', 'M', 'N'],
'To': ['B', 'C', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']})

G = nx.from_pandas_edgelist(df, source='From', target='To', create_using=nx.DiGraph)
roots = [v for v, d in G.in_degree() if d == 0]
leaves = [v for v, d in G.out_degree() if d == 0]

all_paths = []
for root in roots:
for leaf in leaves:
paths = nx.all_simple_paths(G, root, leaf)
all_paths.extend(paths)

for node in nx.nodes_with_selfloops(G):
all_paths.append([node, node])

输出:

>>> pd.DataFrame(sorted(all_paths)).add_prefix('Level_').fillna('')
Level_0 Level_1 Level_2 Level_3
0 A B G J
1 A B G K
2 A B H
3 A B I
4 A C
5 D E
6 F F
7 L L
8 M M
9 N N

文档:networkx.algorithms.simple_paths.all_simple_paths

关于python - 将 2 列数据框转换为多级分层数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69063756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com