Ho un dataframe panda con due variabili id:Unmelt Pandas dataframe
df = pd.DataFrame({'id': [1,1,1,2,2,3],
'num': [10,10,12,13,14,15],
'q': ['a', 'b', 'd', 'a', 'b', 'z'],
'v': [2,4,6,8,10,12]})
id num q v
0 1 10 a 2
1 1 10 b 4
2 1 12 d 6
3 2 13 a 8
4 2 14 b 10
5 3 15 z 12
posso ruotare il tavolo con:
df.pivot('id','q','v')
e finire con qualcosa di simile:
q a b d z
id
1 2 4 6 NaN
2 8 10 NaN NaN
3 NaN NaN NaN 12
Tuttavia, quello che voglio veramente è (la forma originale non fusa):
id num a b d z
1 10 2 4 NaN NaN
1 12 NaN NaN 6 NaN
2 13 8 NaN NaN NaN
2 14 NaN 10 NaN NaN
3 15 NaN NaN NaN 12
In altre parole:
- 'id' e 'num' miei indici (di solito, ho visto solo uno 'id' o 'num' essendo l'indice ma ho bisogno di entrambi dal momento che' Sto cercando di recuperare la forma originale non fuso)
- 'q' sono le mie colonne
- 'v' sono i miei valori nella tabella
Aggiornamento
ho trovato una stretta soluzione da Wes McKinney's blog:
df.pivot_table(index=['id','num'], columns='q')
v
q a b d z
id num
1 10 2 4 NaN NaN
12 NaN NaN 6 NaN
2 13 8 NaN NaN NaN
14 NaN 10 NaN NaN
3 15 NaN NaN NaN 12
Tuttavia, il formato non è proprio la stessa cosa che voglio sopra.
Ahhh, ero così vicino! Sapevo che aveva a che fare con 'df.columns.name', ma non riuscivo a capire come usare' rinominare 'appropriatamente. Grazie per l'aiuto! – slaw
Nota importante: "stretta slaw" suona come "insalata di cavoli". –