2013-11-20 14 views
6

Mam ramkę danych szeregów czasowych i chciałbym ją ponownie zindeksować za pomocą prób i pomiarów.Podpoziom Reindex pand ramki danych multiindex

uproszczony, mam to:

   value 
Trial   
    1  0  13 
      1   3 
      2   4 
    2  3  NaN 
      4  12 
    3  5  34 

którego chcę zamienić się w ten sposób:

    value 
Trial  
    1  0  13 
      1   3 
      2   4 
    2  0  NaN 
      1  12 
    3  0  34 

Jak mogę najlepiej to zrobić?

Odpowiedz

7

Zaledwie wczoraj, znakomity Andy Hayden dodał tę funkcję do wersji 0.13 pandy, która ukaże się już każdego dnia. Zobacz here dla przykładu użycia, który dodał do dokumentów.

Jeśli nie masz nic przeciwko instalowaniu rozwojowej wersji pand ze źródła, możesz z niej teraz skorzystać.

df['Measurements'] = df.reset_index().groupby('Trial').cumcount() 

Poniższy kod jest równoważny, jeśli mniej treściwy i będzie działać na każdym najnowszej wersji pandy.

grouped = df.reset_index().groupby('Trial') 
df['Measurements'] = grouped.apply(lambda x: Series(np.arange(len(x)), x.index)) 

Wreszcie, df.set_index(['Trial', 'Measurements'], inplace=True), aby uzyskać pożądany wynik.

+4

haha! "illustrious" +1;) (Uwaga: cumcount działa również z dupesem w indeksie, ale "ekwiwalent" nie ... Byłem trochę bezczelny w dokumentach i powiedziałem "* zasadniczo * równoważny": p) –

+0

co jeśli Mój indeks nie jest wywoływany ("pomiary") - ale raczej nie ma w ogóle nazwy? – TheChymera

+1

Nienazwane poziomy indeksu można określić za pomocą słowa kluczowego '' level'', np. '' Groupby (level = 1) ''. –

Powiązane problemy