私は、次の表を持っている:Pythonを使ってネストしたテーブル構造から最終的な親を特定する方法は?
私の質問は:私はプログラム的に究極の親をどのように識別していますか?ここ
ルールは、例えばを通して説明されている:
- をID
5.0
の親が51.0
あります。 id51.0
には親がありません。したがって、id5.0
の最終的な親は51.0
です。 - id
6.0
の親は1.0
です。 id1.0
の親は10.0
です。 id10.0
には親がありません。したがって、id6.0
の最終的な親は10.0
です。 - id
2.0
には親がありません。したがって、2.0
のための究極のPARENT_IDがありIDフィールドには重複していないと私はID構造であっ可能性が事前にどのように多くのレベルのネストの知らない2.0
です。ここで
は、この例のコードである:ここでは、そのファイルを生成するためのコードがある
:ここ
import pandas as pd
import numpy as np
original_df = pd.DataFrame({'id': pd.Series([5., 6, 2, 51, 1, 70, 10])
,'parent_id': pd.Series([51, 1, np.nan, np.nan, 10, np.nan, np.nan])})
original_df['ultimate_parent_id'] = ''
original_df
は、最終的なテーブルがどのように見えるかです。
final_df = pd.DataFrame({'id': pd.Series([5., 6, 2, 51, 1, 70, 10])
,'parent_id': pd.Series([51, 1, np.nan, np.nan, 10, np.nan, np.nan])})
final_df['ultimate_parent_id'] = pd.Series([51., 10, 2, 51, 10, 70, 10])
final_df
可能であれば、whileループを使用するソリューションと、ベクトル化された操作を使用するソリューションの両方に非常に興味があります。
このタスクは本質的に連続しています(ベクトル化できません)。パンダはそのような仕事のための悪いツールです。最大のパスと親の長さNを知っていて、十分なメモリスペースがある場合は、おそらくデータフレームを自分自身にN回参加させることができます。 – DyZ
@DYZパンダは、データの開始と終了の単なるフォーマットです。 **後で2次元の表構造に変換できる限り、異なるデータ構造**に依存するソリューションには絶対にオープンしています。 – josiah
たとえば、 'original_df.to_dict()'は辞書形式に変換します。 '{'id':{0:5.0,1:6.0,2:2.0,3:51.0,4:1.0,5:70.0,6:10.0}、 'parent_id ':{0:51.0,1:1.0,2:nan、3:nan、4:10。0、5:nan、6:nan}} – josiah