2017-10-06 5 views
0

J'ai utilisé groupby dans pandas, cependant l'étiquette pour les groupes est simplement une valeur arbitraire, alors que je voudrais que cette étiquette soit l'index de la base de données d'origine (qui est datetime) afin que je puisse créer une nouvelle base de données que je peux tracer en termes de datetime.Python Pandas - Porter l'index comme nom de groupe/index pour une image de groupe produite

grouped_data = df.groupby(
      ['X',df.X.ne(df.X.shift()).cumsum().rename('grp')]) 

    grouped_data2 = grouped_data['Y'].agg(np.trapz).loc[2.0:4.0] 

La colonne x a l'évolution des valeurs de 1 à 4 et la deuxième ligne de code est destiné à intégrer la colonne Y dans les groupes où X est soit 2 ou 3. Ceux-ci sont des motifs répétitifs, je ne so » Je veux que tous les 2 et tous les 3 intégrés ensemble, je veux la période de temps où il va: 22222333333 comme un groupe, puis appliquer le np.trapz à nouveau au groupe suivant où il va: 2222233333. De cette façon, je devrais avoir une nouvelle base de données avec un index correspondant au début de ces périodes et des valeurs qui font partie intégrante de ces périodes.

Répondre

0

Si je comprends bien, vous avez déjà défini votre index pour les valeurs DateTime? Si oui, essayez la fonction mérou:

df.groupby(pd.Grouper(key={index name}, freq={appropriate offset alias})) 

Sans un échantillon de données ensemble, je ne peux pas vraiment fournir une solution complète, mais cela ne devrait résoudre votre problème d'indexation :)

Grouper Function tutorial

Offset aliases