1
親のすぐ下に子の行を持つデータフレームのようなツリーを形成するのは苦労しています。私がしようとしているのは、object_id x parent_idをマージして、軸0に沿って連結することです。 私が探しているのは、以下のスニペットでインターレース関数を実装することです。親子関係で2つのデータフレームを結合する方法(連結とマージの間にあるもの)
In[1]: parents = pd.DataFrame({'object_id':[1,2],
'parent_id':[0,0],
'position': [1,2]})
In[2]: parents
Out[2] object_id parent_id position
0 1 0 1
1 2 0 2
In[3]: children = pd.DataFrame({'object_id':[3,4,5],
'parent_id':[1,1,2],
'position': [1,2,1]})
In[4]: children
Out[4]: object_id parent_id position
0 3 1 1
1 4 1 2
2 5 2 1
In[5]: interlace(parent, children, on=('object_id', 'parent_id'))
Out[5]: object_id parent_id position
0 1 0 1
1 3 1 1
2 4 1 2
3 2 0 1
4 5 2 1
パンダで効率的な方法はありますか? は、私は1つが
parents_with_children = []
for i, parentrow in parents.iteritems():
childrenrows = children[children.parent_id == parentrow.object_id]
parents_with_children.append(pd.concat([parentrow, childrenrows])
result = pd.concat(parents_with_children)
ような何かを行うことができると思うしかし、私はそこにし、より簡単に、これを行うには、おそらく、より効率的な方法必要があります感じています。
編集:同じレベルと同じ親を持つ行は、その位置で並べ替える必要があります。
これは動作しますが、結果は、位置列でソート滞在しないでしょう。元々の質問では強調していなかったと思います。 – johnnyB