2017-08-31 82 views
-4

我有一个包含数据框父母与子女的记录这样转换大熊猫据帧为不同的格式

ID | Parent | Child 
0 | 1 | M 
1 | 1 | N 
2 | 1 | O 
3 | 2 | T 
4 | 2 | Q 
5 | 3 | U 

我想将其转换为这种格式

ID | List  | Parent 
0 | 1   | N/A 
1 | M   | 1 
2 | N   | 1 
3 | O   | 1 
4 | 2   | N/A 
5 | T   | 2 
6 | Q   | 2 
7 | 3   | N/A 
8 | U   | 3 

任何帮助将不胜感激!

+0

这个问题不太可能以目前的形式得到解答。请访问[如何询问?](https://stackoverflow.com/help/how-to-ask)寻求建议。 – IanS

回答

-1

创建从子项到父项的映射。

v = df.set_index('ID').values 
mapping = dict(v[:, ::-1]) 

使用旧值创建一个新的数据帧。

df_new = pd.DataFrame({'List' : pd.Series(v.reshape(-1,)).drop_duplicates()}) 
df_new 
    List 
0  1 
1  M 
3  N 
5  O 
6  2 
7  T 
9  Q 
10 3 
11 U 

现在,通过mapping字典pd.Series.map

df_new['Parent'] = df_new.List.map(mapping) 
df_new 
    List Parent 
0  1  NaN 
1  M  1.0 
3  N  1.0 
5  O  1.0 
6  2  NaN 
7  T  2.0 
9  Q  2.0 
10 3  NaN 
11 U  3.0 

可以使用df.Parent.fillna('N/A', inplace=True)转换NaN'N/A'

+0

谢谢!这很棒。 –