2017-08-30 57 views
2

我有這樣Python的大熊貓:特定列的每個實例創建新列值

---------------- 
RecID| A |B 
---------------- 
1 |Dog | x 
2 |Dog | y 
3 |Dog | z 
4 |Cat | a 
5 |Cat | b 

數據幀,想知道是否有無論如何改造,以便它是這樣的:

----------------------------- 
RecID| A |B_1|B_2|B_3| 
----------------------------- 
1 |Dog| x | y | z | 
2 |Cat| a | b | NA| 

基本上創建B的每個可能值的新列,按A的特定值分組,並填充NA(如果需要)。

回答

3

一種方法是

In [294]: (df.groupby('A', sort=False).B.apply(list) 
      .apply(pd.Series).add_prefix('B_').reset_index()) 
Out[294]: 
    A B_0 B_1 B_2 
0 Dog x y z 
1 Cat a b NaN 

或者,

In [320]: (df.groupby('A', sort=False).B.apply(lambda x: pd.Series(x.values)) 
      .unstack().rename(columns=lambda x: 'B_{}'.format(int(x)+1)) 
      .reset_index()) 
Out[320]: 
    A B_1 B_2 B_3 
0 Dog x y  z 
1 Cat a b None 
0

使用​​與groupbycumcount

df.set_index(
    ['A', df.groupby('A').cumcount() + 1] 
).B.unstack().add_prefix('B_').reset_index() 

    A B_1 B_2 B_3 
0 Cat a b None 
1 Dog x y  z 
相關問題