2017-04-25 158 views
1
到第二排的柱移動到第一排列

我有CSV數據這樣Python-我想用大熊貓

column1 column2 
A  12 
A  13 
B  15 
B  16 
C  12 
C  14 

我想通過創建另一個欄3合併與第1列相同值的行或說轉像這

column1 column2 column3 
A  12  13 
B  15  16 
C  12  14 

我正在使用熊貓,並希望爲此運行一些循環,可能。

+0

如果'column1'中有三個'A',該怎麼辦? –

回答

3

使用groupbycumcount設置一個指數,然後unstack

c = 'column1' 
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2 
s.unstack().add_prefix('column').reset_index() 

    column1 column2 column3 
0  A  12  13 
1  B  15  16 
2  C  12  14 

如果有羣體的數量不均,以及該會處理。

考慮df

column1 column2 
A  12 
A  13 
B  15 
B  16 
B  16 
C  12 
C  14 
C  14 
C  14 

然後

c = 'column1' 
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2 
s.unstack().add_prefix('column').reset_index() 

    column1 column2 column3 column4 column5 
0  A  12.0  13.0  NaN  NaN 
1  B  15.0  16.0  16.0  NaN 
2  C  12.0  14.0  14.0  14.0 

如果你想填補這些NaN時間提前,使用fill_value參數unstack

c = 'column1' 
s = df.set_index([c, df.groupby(c).cumcount() + 2]).column2 
s.unstack(fill_value=0).add_prefix('column').reset_index() 


    column1 column2 column3 column4 column5 
0  A  12  13  0  0 
1  B  15  16  16  0 
2  C  12  14  14  14