stack(): usage typique#
import pandas as pd
on a des données qui ressemblent à ceci
df = pd.read_csv("data/stack-simple.csv")
df
| city | postcode | t1 | t2 | t3 | t4 | |
|---|---|---|---|---|---|---|
| 0 | London | 90000 | 1 | 2 | 3 | 0 |
| 1 | Paris | 75000 | 0 | 4 | 2 | 3 |
on veut produire une table simplifiée qui ressemblerait à ceci; on élimine les lignes qui correspondraient à une valeur nulle
city |
postcode |
type |
nombre |
|---|---|---|---|
London |
90000 |
t1 |
1 |
London |
90000 |
t2 |
2 |
London |
90000 |
t3 |
3 |
Paris |
75000 |
t2 |
4 |
Paris |
75000 |
t3 |
2 |
Paris |
75000 |
t4 |
3 |
se concentrer sur les colonnes ti#
# commencez par extraire les colonnes spéciales
columns = ['t1', 't2', 't3', 't4']
df2 = ...
stack()#
attention comme on a un index simple sur les colonnes, le stack() nous produit une Series
# appliquez un simple `stack()` sur la dataframe df2
# regardez le contenu et le type
series = ...
on peut nettoyer les 0#
on peut se passer de cette étape si on a des n/a à la place des 0; mais ici, c’est le moment de nettoyer
# à vous
...
passer de l’index à une colonne ‘usuelle’#
à ce stade, que faut-il faire avec la donnée type pour se rapprocher de ce qu’on cherche à produire ?
[indice] voyez df.reset_index()
# à vous
df3 = ...
nommer#
# les noms des colonnes dans df3 ne sont vraiment pas terribles
# à vous...
recoller#
à ce stade il ne reste plus qu’à recoller les morceaux
[indice] pd.merge() et/ou df.join()
# à vous
nettoyer#
et enfin, à éliminer les colonnes qui sont de trop
# à vous
# pour vérifier le résultat de visu
# df_all