Donnant une colonne de plusieurs indices/en-têtes,
Je suis en train de travailler avec les pandas dataframes qui sont essentiellement des séries chronologiques comme ceci:
level
Date
1976-01-01 409.67
1976-02-01 409.58
1976-03-01 409.66
…
À ce que je veux, de plusieurs indices/en-têtes pour le niveau de la colonne, comme suit:
Station1 #Name of the datasource
43.1977317,-4.6473648,5 #Lat/Lon of the source
Precip #Type of data
Date
1976-01-01 409.67
1976-02-01 409.58
1976-03-01 409.66
…
Donc, essentiellement, je suis à la recherche de quelque chose comme Mydata.columns.level1 = ['Station1']
, Mydata.columns.level2 = [Lat,Lon]
, Mydata.columns.level3 = ['Precip']
.
Raison d'être que d'un seul emplacement peut avoir plusieurs ensembles de données, et que je veux être en mesure de choisir toutes les données à partir d'un seul endroit, ou toutes les données d'un certain type de tous les lieux, à partir d'une ultérieure fusionné, grand dataframe.
Je peux mettre en place un exemple dataframe de les pandas de la documentation et de test de ma sélection, mais avec mes données, j'ai besoin d'une autre façon de définir l'index comme dans l'exemple.
Exemple:
Construit une petite dataframe
header = [np.array(['location','location','location','location2','location2','location2']),
np.array(['S1','S2','S3','S1','S2','S3'])]
df = pd.DataFrame(np.random.randn(5, 6), index=['a','b','c','d','e'], columns = header )
df
location location2
S1 S2 S3 S1 S2 S3
a -1.469932 -1.544511 -1.373463 -0.317262 0.024832 -0.641000
b 0.047170 -0.339423 1.351253 0.601172 -1.607339 0.035932
c -0.257479 1.140829 0.188291 -0.242490 1.019315 -1.163429
d 0.832949 0.098170 -0.818513 -0.070383 0.557419 -0.489839
e -0.628549 -0.158419 0.366167 -2.319316 -0.474897 -0.319549
Choisir le type de données ou de l'emplacement:
df.loc(axis=1)[:,'S1']
location location2
S1 S1
a -1.469932 -0.317262
b 0.047170 0.601172
c -0.257479 -0.242490
d 0.832949 -0.070383
e -0.628549 -2.319316
df['location']
S1 S2 S3
a -1.469932 -1.544511 -1.373463
b 0.047170 -0.339423 1.351253
c -0.257479 1.140829 0.188291
d 0.832949 0.098170 -0.818513
e -0.628549 -0.158419 0.366167
Ou je suis juste à la recherche de mauvais terminologie? Parce que 90% de tous les exemples dans la documentation, et les questions ici seulement de traiter la verticale de "trucs" (dates ou abcde dans mon cas) que les index, et un rapide df.index.values
sur mes données de test aussi juste me met à la verticale array(['a', 'b', 'c', 'd', 'e'], dtype=object)
.
Je suis aksing comment donner un dataframe de plusieurs indices. Au lieu d'un seul
level
, j'ai besoin de chaînes pour Location
, LatLon
et Type
. L'exemple dataframes ne sont là que pour illustrer pourquoi j'ai besoin de plusieurs indices.Voulez-vous dire quelque chose comme
df.loc(axis=1)['location','S1']
(ou df['location','S1']
)?Non, la "cueillette des trucs" partie, j'ai compris. C'est juste pour illustrer le "pourquoi"! Je suis à la recherche d'un moyen de transformer mes données dans un formulaire où je pourrais utiliser ces options. J'ai changé la qeustion un peu. Je suis à la recherche d'un moyen de définir plusieurs colonnes avec
df.columns = ['something']
Ah, vous voulez créer le multi-colonnes indexées. Vous pouvez faire quelque chose comme
df.columns = pd.MultiIndex.from_tuples([('Station1', 'Precip', ..), ..])
OriginalL'auteur JC_CL | 2015-09-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser multiIndex de donner plusieurs colonnes avec les noms pour chaque niveau. Utilisation
MultiIndex.from_product()
de faire multiIndex de produits cartésiens de plusieurs iterables.Deux niveaux seront loc et S.
Maintenant, vous pouvez utiliser xs à couper le dateframe basée sur les niveaux.
df1.columns = header
(Qui devrait être simplement de changer l'en-tête d'un dataframe?!) également changé les en-têtes dedf2
etdf3
, copié à partir de la même origine df, et maintenant, aprèsclear
ing ipython,df1.columns = header
ne pas faire n'importe quoi.si vous avez utilisé
df1=df df2=df
pour la copie , il l'habitude de créer une copie. Il ne fera que créer des variables df1 et df2 qui fait référence à df. Afin que toutes les modifications apportées à df2 va aussi changer df1 et vice versa. Explicitement de faire une copie, l'utilisationdf1=df.copy() df2=df.copy()
.Ah, merde... mon préféré erreur lors de la lecture dans ipython. Maintenant, il fonctionne, et plus de noms et de tranchage exemples sont beaucoup mieux que ma première approche. Merci!
OriginalL'auteur BKS