<blockquote>
<p>Create parent and child dataframe from actual dataframe</p>
</blockquote>
<pre><code>dfchild = df.loc[~(df['id']==df['pcid'])]
dfparent = df.loc[(df['id']==df['pcid'])]
</code></pre>
<blockquote>
<p>convert these df into dict:</p>
</blockquote>
<pre><code>parentdict = dfparent.to_dict('records')
childdict = dfchild.to_dict('records')
</code></pre>
<blockquote>
<p>iterate the parentdict and inside get the respective child element from childdict based on parentid:</p>
</blockquote>
<pre><code>for parentdic in parentdict:
eleid= int(parentdic['id'])
childdictva=[]
for child in childdict:
childele=int(float(child['parentid']))
if childele==eleid:
childdictva.append(child)
parentdic['children']=childdictva
</code></pre>
<blockquote>
<p>Final code:</p>
</blockquote>
<pre><code>df['id']=df['id'].apply(str)
dfchild = df.loc[~(df['id']==df['pcid'])]
dfparent = df.loc[(df['id']==df['pcid'])]
data = {}
parentdict = dfparent.to_dict('records')
childdict = dfchild.to_dict('records')
for parentdic in parentdict:
eleid= int(parentdic['id'])
childdictva=[]
for child in childdict:
childele=int(float(child['parentid']))
if childele==eleid:
childdictva.append(child)
parentdic['children']=childdictva
data["data"] = parentdict
parentdict
{'data': [{'id': '5', 'level': 0, 'parentid': 0, 'pcid': '5', 'children': []},
{'id': '4',
'level': 0,
'parentid': 0,
'pcid': '4',
'children': [{'id': '991', 'level': 2, 'parentid': 4, 'pcid': '4_2'},
{'id': '992', 'level': 3, 'parentid': 4, 'pcid': '4_3'},
{'id': '989', 'level': 1, 'parentid': 4, 'pcid': '4_1'}]}]}
</code></pre>