2017-05-30 73 views
0

当前正在使用python和newbie。我具有由两列ID和父ID的数据帧使用带有条件的pandas库在数据帧上添加列NaN

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

和期望输出是如表如下:

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

我已经使用在其上但couldn fillna()函数尝试没有预期的结果。

回答

1

我认为你应该对它使用groupby和merge函数。

print(df1) 

    id parent 
0 1  A 
1 2  B 
2 3  C 
3 4  A 
4 5  A 
5 6  C 
6 A NaN 
7 B NaN 
8 C NaN 

然后搜索自己的孩子:

df2 = df1.groupby('parent').agg({'id': lambda x: x.tolist()}).reset_index() 
print(df2) 

    parent  child 
0  A [1, 4, 5] 
1  B  [2] 
2  C  [3, 6] 

最后将它们合并:

df2.columns = ['id', 'child'] 
df3 = pd.merge(df1,df2,on='id',how='left') 
print(df3) 
    id parent  child 
0 1  A  NaN 
1 2  B  NaN 
2 3  C  NaN 
3 4  A  NaN 
4 5  A  NaN 
5 6  C  NaN 
6 A NaN [1, 4, 5] 
7 B NaN  [2] 
8 C NaN  [3, 6] 
相关问题