2014-10-22 10 views
5

Próbuję przekonwertować unstacked, wielu indeksowane ramki danych z powrotem do pojedynczych pand indeks datetime.Konwersja pandy multi-indeks pandy datownik

Indeks moim oryginalny danych ramki, czyli przed multi-indeksowania i rozkładania, wygląda następująco:

In [1]: df1_season.index 
Out [1]: 

<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-05-01 02:00:00, ..., 2014-07-31 23:00:00] 
Length: 1472, Freq: None, Timezone: None 

potem zastosować multi-indeksowanie i rozkładania więc mogę wykreślić dane roczne na szczycie siebie tak:

df_sort = df1_season.groupby(lambda x: (x.year, x.month, x.day, x.hour)).agg(lambda s: s[-1]) 
df_sort.index = pd.MultiIndex.from_tuples(df_sort.index, names=['Y','M','D','H']) 
unstacked = df_sort.unstack('Y') 

Moja nowy danych ramki do dwóch pierwszych dniach maja wygląda następująco:

In [2]: unstacked 
Out [2]: 

      temp  season   
Y  2013 2014 2013 2014 
M D H        
5 1 2 24.2 22.3 Summer Summer 
    8 24.1 22.3 Summer Summer 
    14 24.3 23.2 Summer Summer 
    20 24.6 23.2 Summer Summer 
    2 2 24.2 22.5 Summer Summer 
    8 24.8 22.2 Summer Summer 
    14 24.9 22.4 Summer Summer 
    20 24.9 22.8 Summer Summer 

736 rows × 4 columns 

Indeks dla nowej ramki Dane przedstawione powyżej teraz wygląda tak:

In [2]: unstacked.index.values[0:8] 
Out [2]: 

array([(5, 1, 2), (5, 1, 8), (5, 1, 14), (5, 1, 20), (5, 2, 2), (5, 2, 8), (5, 2, 14), 
     (5, 2, 20], dtype=object) 

które nie produkują bardzo ładne działki w stosunku do xticks (dużych i małych). Jeśli mogę przekonwertować ten indeks z powrotem do pojedynczego indeksu pandy datetime, używając tylko danych miesięcznych, dziennych i godzinowych, wówczas znaczniki główne/pomniejsze będą drukowane automagicznie w sposób, w jaki chciałbym (myślę). Na przykład:

obecne rozwiązanie:

xticks = (5, 1, 2), (5, 1, 8) … (5, 2, 20) 

wymagane rozwiązanie:

xticks(major) = Day, Month (displayed as MAY 01, MAY 02 etc etc) 
xticks(minor) = Hour (displayed as 02h 08h … 20h) 
+0

Nawet mała wskazówka byłaby bardzo doceniana. – roi3i3ie

+0

Jak mogę to zmienić, aby uzyskać wsparcie? Jest kilka pytań na temat ponad roku bez odpowiedzi. – roi3i3ie

+0

Kolejny miesiąc? Cokolwiek pomoże ... – roi3i3ie

Odpowiedz

0
import pandas as pd 
import matplotlib.pyplot as plt 
from numpy.random import randn 

ts = pd.Series(randn(1000), index=pd.date_range('1/1/2000', periods=1000)) 
ts = ts.cumsum() 

plt.figure() 
for year in set(ts.index.year): 
    tmp = ts[str(year)].values 
    plt.plot(tmp, label = year) 
plt.legend() 
plt.show() 

myślę, że to jest lepszy sposób, aby osiągnąć swój cel niż ponownego indeksowania. Co myślisz?

+0

Hej !, bardzo dziękuję za odpowiedź. Ok, właśnie to zrobiłem. Tak, wydaje się, że jest to znacznie łatwiejszy sposób układania/sortowania rocznych danych jeden na drugim, więc dzięki za to. Jednak to nie jest rozwiązanie tego problemu. Zamiast moich xticks, minor/major, które są kodowane corocznie (np. Dzień miesiąca godzina), są teraz po prostu podzielone na dowolne fragmenty pojedynczych punktów danych, skalowanie od 0 do n-1, gdzie n to liczba punktów danych w moim pomiarze zestaw próbek. – roi3i3ie

+0

W porządku, wyobrażam sobie, że w tym punkcie jest manipulacja x_axis kleszcza ... ale nie jestem w stanie dowiedzieć się, jak dokładnie to zrobić. Czy mógłbyś ewentualnie załadować dane do CSV gdzieś, aby móc z nimi zagrać i może utworzyć inny post na ten temat? Najlepszym terminem na to byłoby "Planu sezonowości" - wziąć informacje z wielu lat i wykreślić je na jednej osi Jan-Dec? Nie mogę znaleźć żadnej dokumentacji dotyczącej tego, co jest dla mnie zaskakujące. – EngineeredE

+0

Hej! Nie było mnie, przepraszam za opóźnienie. Pozwól, że wrócę do ciebie w tej sprawie. Dostarczę ci również csv. Tak, również na twoje pytanie. O to właśnie chodzi w fabule. – roi3i3ie

1

Konwersja danych w pandach bardzo szybko się brudzi, jak się wydaje. Moja ogólna rekomendacja dotycząca pand i indeksowania polega na tym, aby nigdy nie ustawiać indeksu, ale najpierw go skopiować. Upewnij się, że masz kolumnę zawierającą indeks, ponieważ pandy nie pozwalają na wszystkie operacje w indeksie, a intensywne ustawienie i resetowanie indeksu może spowodować zniknięcie kolumn.

TLDR; Nie konwertuj indeksu z powrotem. Zachowaj kopię.

+0

To również prowadzi do zasady otwartej/zamkniętej: http://en.wikipedia.org/wiki/Open/closed_principle – firelynx