Mon ensemble de données contient donc des informations par emplacement pour n dates. Le problème est que chaque date est en fait un en-tête de colonne différent. Par exemple, le CSV ressemble à
location name Jan-2010 Feb-2010 March-2010
A "test" 12 20 30
B "foo" 18 20 25
Ce que je voudrais, c'est que ça ressemble
location name Date Value
A "test" Jan-2010 12
A "test" Feb-2010 20
A "test" March-2010 30
B "foo" Jan-2010 18
B "foo" Feb-2010 20
B "foo" March-2010 25
le problème est que je ne sais pas combien de dates il y a dans la colonne (même si je sais qu'elles commenceront toujours après le nom)
Réponses:
MISE
À JOUR Depuis la v0.20,
melt
est une fonction de premier ordre, vous pouvez maintenant utiliserANCIENNES VERSIONS (ER): <0,20
Vous pouvez utiliser
pd.melt
pour obtenir la plupart du chemin, puis trier:(Vous voudrez peut-être ajouter un
.reset_index(drop=True)
, juste pour garder la sortie propre.)Remarque :
pd.DataFrame.sort
a été abandonné au profit depd.DataFrame.sort_values
.la source
df2
[retour] endf
pandas.pivot_table(df2,values='Value',index=['location','name'],columns='Date').reset_index()
.Utiliser
set_index
avecstack
forMultiIndex Series
, puis pourDataFrame
ajouterreset_index
avecrename
:la source
Je suppose que j'ai trouvé une solution plus simple
Concater le tout
temp1
avectemp2
la colonne dename
Vous avez maintenant ce que vous avez demandé.
la source
pd.wide_to_long
Vous pouvez ajouter un préfixe à vos colonnes d'année, puis alimenter directement vers
pd.wide_to_long
. Je ne prétendrai pas que c'est efficace , mais cela peut dans certaines situations être plus pratique quepd.melt
, par exemple lorsque vos colonnes ont déjà un préfixe approprié.la source