2013-08-06 30 views
8

Korzystanie z importowanego pliku CSV, ja indeksowane do DataFrame tak ...Praca z set_index w Pandy DataFrame

rdata.set_index(['race_date', 'track_code', 'race_number', 'horse_name']) 

To właśnie odcinek DataFrame wygląda ...

race_date track_code race_number horse_name   work_date work_track 
2007-08-24 BM   8   Count Me Twice  2007-05-31   PLN 
            Count Me Twice  2007-06-09   PLN 
            Count Me Twice  2007-06-16   PLN 
            Count Me Twice  2007-06-23   PLN 
            Count Me Twice  2007-08-05   PLN 
            Judge's Choice  2007-06-07   BM 
            Judge's Choice  2007-06-14   BM 
            Judge's Choice  2007-07-08   BM 
            Judge's Choice  2007-08-18   BM 

Dlaczego kolumna "horse_name" nie jest pogrupowana tak jak data, ścieżka i wyścig? Być może jest to zgodne z projektem, więc w jaki sposób mogę pokroić tę większą ramkę DataFrame według rasy, aby mieć nową nazwę DataFrame o nazwie horse_name?

+0

wygląda jak błąd, poprawne miejsce na raporty o błędach jest [na github] (https://github.com/pydata/pandas/issues) :) Dobre znalezisko! –

+1

To pytanie wydaje się być nie na temat, ponieważ jest to zgłoszenie błędu. –

Odpowiedz

10

To nie jest błąd. Tak właśnie ma działać.

DataFrame musi pokazywać każdy element w swoich danych. Jeśli więc indeks ma jeden poziom, poziom ten zostanie w pełni rozwinięty. Jeśli ma dwa poziomy, pierwszy poziom zostanie zgrupowany, a drugi zostanie w pełni rozwinięty, jeśli ma poziomy drzew, pierwsze dwa zostaną zgrupowane, a trzeci zostanie rozwinięty itd.

Dlatego właśnie nazwa konia nie jest zgrupowana. Jak będzie można zobaczyć wszystkie elementy w DataFrame jeśli grupa również pod nazwą konia :)

Spróbuj to zrobić:

rdata.set_index(['race_date', 'track_code', 'race_number']) 

czyli

rdata.set_index(['race_date', 'track_code']) 

Zobaczysz że ostatni poziom indeksu jest zawsze w pełni rozwinięty, aby umożliwić wyświetlanie wszystkich elementów w DataFrame.

+0

To działało. Dziękuję Ci! – TravisVOX