web-dev-qa-db-fra.com

Comment ajouter simplement un niveau de colonne à une trame de données pandas

disons que j'ai une trame de données qui ressemble à ceci:

df = pd.DataFrame(index=list('abcde'), data={'A': range(5), 'B': range(5)})
 df
Out[92]: 
   A  B
a  0  0
b  1  1
c  2  2
d  3  3
e  4  4

En supposant que cette trame de données existe déjà, comment puis-je simplement ajouter un niveau "C" à l'index de la colonne pour obtenir ceci:

 df
Out[92]: 
   A  B
   C  C
a  0  0
b  1  1
c  2  2
d  3  3
e  4  4

J'ai vu SO une réponse comme celle-ci python/pandas: comment combiner deux trames de données en une avec un index de colonne hiérarchique? mais cela concatre une trame de données différente au lieu d'ajouter un niveau de colonne à une trame de données déjà existante.

-

32
Steven G

Comme suggéré par @StevenG lui-même, une meilleure réponse:

df.columns = pd.MultiIndex.from_product([df.columns, ['C']])

print(df)
#    A  B
#    C  C
# a  0  0
# b  1  1
# c  2  2
# d  3  3
# e  4  4
45
Romain

option 1
set_index et T

df.T.set_index(np.repeat('C', df.shape[1]), append=True).T

option 2
pd.concat, keys et swaplevel

pd.concat([df], axis=1, keys=['C']).swaplevel(0, 1, 1)

enter image description here

15
piRSquared