2017-05-28 3 views
0

私は現在、それが初めてであるので、Pythonで作業しています。私は、以下のように2つの列が存在するデータフレームを持っています。パンダのライブラリを使用して、与えられた条件の行にデータをコラム

プリント(df.fillna([ 'ID'])) プリント(DF:私は次のコード使用している

id | parent | child 
1 | A  | NaN 
2 | B  | NaN 
3 | C  | NaN 
4 | A  | NaN 
5 | A  | NaN 
6 | C  | NaN 
NaN | A  | 1 ; 4 ; 5 
NaN | B  | 2 
NaN | C  | 3 ; 6 

id | parent 
1 | A 
2 | B 
3 | C 
4 | A 
5 | A 
6 | C 

、必要な出力は以下のようでした。 parent_page_id.unique())

上記のような出力を取得するには、助けが必要です。

答えて

0

「親」列にはgroupbyを入力し、applyを使用して「子」を作成し、最後にconcatを作成します。

t = df.groupby('parent')['id'].apply(lambda x: ';'.join(x.astype(str))) 
t = pd.DataFrame(t).reset_index() 
t.columns = ['parent', 'child'] 
pd.concat([df, t]) 

出力:

Out[74]: 
    child id parent 
0 NaN 1.0  A 
1 NaN 2.0  B 
2 NaN 3.0  C 
3 NaN 4.0  A 
4 NaN 5.0  A 
5 NaN 6.0  C 
0 1;4;5 NaN  A 
1  2 NaN  B 
2 3;6 NaN  C 
+0

ありがとうございました。 –

+0

@Sunilようこそ。そうであれば、答えが自分の問題を解決すれば、彼は投票したり、報酬の回答者に答えを受け入れることができます。 – gzc

+0

私は投票できないので私は傾ける –

1

使用GROUPBYは親のための子供のIDをCONCATして、親子連結元のdfにDFします。

df_parent_kids = df.astype(str).groupby('parent')['id']\ 
        .agg(lambda x: ' ; '.join(x)).reset_index().rename(columns={'id':'child'}) 
pd.concat([df,df_parent_kids])[['id','parent','child']] 

Out[598]: 
    id parent  child 
0 1.0  A  NaN 
1 2.0  B  NaN 
2 3.0  C  NaN 
3 4.0  A  NaN 
4 5.0  A  NaN 
5 6.0  C  NaN 
0 NaN  A 1 ; 4 ; 5 
1 NaN  B   2 
2 NaN  C  3 ; 6 
関連する問題