如何在python,dataframe中将数据转换为嵌套字典
Posted
技术标签:
【中文标题】如何在python,dataframe中将数据转换为嵌套字典【英文标题】:how to convert data into nested dictionary in python,dataframe 【发布时间】:2021-06-11 02:36:54 【问题描述】:我有一个项目代码和组件的大型数据集,每个项目代码都与组件相关,进一步的组件成为另一个组件的项目代码。如何在python
中创建嵌套的dictionary
item code component
a q
b w
c r
d t
e y
q u
q v
想要的输出:-
a:q:[u,v],b:w,c:r etc
如何在python
中实现嵌套dictionary
,我有大量数据
我使用了defaultdict
,但它只给了我一个dictionary
,而不是一个嵌套的dictionary
【问题讨论】:
这需要 pandas+networkx @Pygirl 我从未使用过networkx
。你能告诉我如何使用networkx
来做到这一点吗?同时,我将尝试在纯 python
中执行此操作。
networkx怎么用,我从来没用过
检查我的答案这是我能尝试的最好的。
@MayankPorwal:单独使用 networkx 不会有帮助,因为您仍然需要将结果后处理为上述给定格式。但是是的,Networkx 可以帮助我将路径作为每个节点的元组,我可以将其转换为上述格式。
【参考方案1】:
In [108]: df = pd.DataFrame('item_code': list('abcdeqq'), 'component': list('qwrtyuv'))
In [109]: import networkx as nx
In [110]: g = nx.DiGraph([(k,v) for k,v in zip(df['item_code'], df['component'])])
In [111]: k:v if len(v) > 1 else v[0] for k,v in nx.convert.to_dict_of_lists(g).items() if v
Out[111]: 'a': 'q', 'q': ['u', 'v'], 'b': 'w', 'c': 'r', 'd': 't', 'e': 'y'
【讨论】:
这将与df.groupby(['item_code'])['component'].apply(list).to_dict()
相同
...或类似于a: [d for c,d in df.values if a==c] for a,b in df.values
甚至更好但更长的a: set(d for c,d in df.values if a==c) for a,b in df.values
【参考方案2】:
使用 networkx 你可以得到类似的东西。基于这个answer,我能够找到这个解决方案:
import networkx
G = nx.DiGraph()
G.add_edges_from(df.values)
def comb_tup(li_tup):
d =
crnt = d # memo the crnt subtree
stck = [] # stack of (sub)trees along current path
for k, v in li_tup:
while stck and k not in crnt:
crnt = stck.pop()
if k not in crnt:
crnt[k] =
stck.append(crnt)
crnt = crnt[k]
crnt[v] =
return d
final_di =
for node in G.nodes:
vi = list(nx.dfs_edges(G,node))
d = comb_tup(vi)
if len(d.keys()):
for k,v in d.items():
final_di[k] = v
final_di:
'a': 'q': 'u': , 'v': ,
'q': 'u': , 'v': ,
'b': 'w': ,
'c': 'r': ,
'd': 't': ,
'e': 'y':
如果你有这些数据:
item_code component
0 a q
1 b w
2 c r
3 d t
4 e y
5 q u
6 q v
7 u x
final_di:
'a': 'q': 'u': 'x': , 'v': ,
'q': 'u': 'x': , 'v': ,
'b': 'w': ,
'c': 'r': ,
'd': 't': ,
'e': 'y': ,
'u': 'x':
【讨论】:
以上是关于如何在python,dataframe中将数据转换为嵌套字典的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中将 Dictionary 项转换为多个 DataFrame?
如何在 pyspark 中将 DenseMatrix 转换为 spark DataFrame?
在Python DataFrame中将字符串转换为float64 [重复]
在 Python Pandas DataFrame 中将 timedelta64[ns] 列转换为秒