2016-01-01 26 views

risposta

5

Si potrebbe utilizzare groupby/cumcount per assegnare numeri di colonna e quindi chiamare pivot:

import pandas as pd 

df = pd.DataFrame({'x': [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2], 
        'y': [1, 1, 2, 5, 6, 8, 1, 8, 4, 1, 7, 3]}) 

df['columns'] = df.groupby('x')['y'].cumcount() 
#  x y columns 
# 0 0 1  0 
# 1 1 1  0 
# 2 2 2  0 
# 3 0 5  1 
# 4 1 6  1 
# 5 2 8  1 
# 6 0 1  2 
# 7 1 8  2 
# 8 2 4  2 
# 9 0 1  3 
# 10 1 7  3 
# 11 2 3  3 

result = df.pivot(index='x', columns='columns') 
print(result) 

rendimenti

  y   
columns 0 1 2 3 
x     
0  1 5 1 1 
1  1 6 8 7 
2  2 8 4 3 

O, se si può davvero fare affidamento sui valori in x ripetersi nell'ordine N volte,

N = 3 
result = pd.DataFrame(df['y'].values.reshape(-1, N).T) 

cede

0 1 2 3 
0 1 5 1 1 
1 1 6 8 7 
2 2 8 4 3 

utilizzando reshape è più veloce di chiamare groupby/cumcount e pivot, ma è meno robusto dato che si basa sui valori in y che appare nel giusto ordine.

Problemi correlati