В настоящее время я работаю над Python, поскольку я новичок в этом. У меня есть фрейм данных, в котором есть два столбца, как указано ниже.

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

И требуемый результат был как:

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

Я использовал следующий код:

печать (df.fillna (['id'])) печать (df.parent_page_id.unique ())

Мне нужна помощь, чтобы получить вывод, как указано выше в таблице.

0
Sunil Nepali 28 Май 2017 в 13:32

2 ответа

Лучший ответ

Вы можете groupby в столбце 'parent', а затем использовать apply для создания 'child', наконец 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
gzc 28 Май 2017 в 10:46

Используйте groupby, чтобы объединить дочерние идентификаторы для родителей, а затем соединить родительский-дочерний 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
1
Allen 28 Май 2017 в 11:07