2017-04-25 130 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