如何将具有父/子层次结构的数据框转换为在单独列中具有父名称的数据框?
Posted
技术标签:
【中文标题】如何将具有父/子层次结构的数据框转换为在单独列中具有父名称的数据框?【英文标题】:How to translate a dataframe with parent / child hierarchy into a dataframe with parent name in separate columns? 【发布时间】:2021-10-28 18:36:31 【问题描述】:我有位置信息的数据框,其中包含 Name
、Code
、Parent
和 Name
字段包含所有 Country
、State
、District
、Taluk
单个字段中的名称。
我想查看以下格式。
【问题讨论】:
【参考方案1】:基于previous answer,您可以使用networkx
包来完成您想要的。这里唯一的区别是图表是倒置的,所以根 (Parent=NaN) 是一个叶子。
# Python env: pip install networkx
# Anaconda env: conda install networkx
import networkx as nx
# Create network from your dataframe
G = nx.from_pandas_edgelist(df, source='Code', target='Parent',
create_using=nx.DiGraph)
# Here, roots are the leaves of your graph
leaves = [node for node, degree in G.out_degree() if degree == 0]
# Find all paths
paths = []
for node in df['Code']:
for leaf in leaves:
path = nx.all_simple_paths(G, node, leaf)
paths.append(list(reversed(*path))[1:]) # [1:] to remove nan
# Build your new columns
names = df.set_index('Code')['Name'].to_dict()
cols = ['Country', 'State', 'District', 'Taluk']
df1 = pd.DataFrame(paths, index=df.index, columns=cols).replace(names)
# Join your 2 dataframes
df = df.join(df1).fillna('')
输出:
>>> df
Name Code Parent Country State District Taluk
0 India IN India
1 Karnataka IN_KA IN India Karnataka
2 Bangalore KA_BNG IN_KA India Karnataka Bangalore
3 Yelahanka KA_YLH KA_BNG India Karnataka Bangalore Yelahanka
【讨论】:
我在应用真实数据并弄清楚时遇到了一些问题。谢谢您的帮助。成功后会更新。以上是关于如何将具有父/子层次结构的数据框转换为在单独列中具有父名称的数据框?的主要内容,如果未能解决你的问题,请参考以下文章
如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?