2013-09-04 12 views
17

stworzyłem Series z DataFrame, kiedy resampled niektóre dane o liczbie tak: gdzie H2 jest DataFrame:Pandy zresetować indeks serii usunąć multiindex

H3=H2[['SOLD_PRICE']] 
    H5=H3.resample('Q',how='count') 
    H6=pd.rolling_mean(H5,4) 

Otrzymano serię, która wygląda tak:

1999-03-31 SOLD_PRICE  NaN 
1999-06-30 SOLD_PRICE  NaN 
1999-09-30 SOLD_PRICE  NaN 
1999-12-31 SOLD_PRICE 3.00 
2000-03-31 SOLD_PRICE 3.00 

z indeksem, który wygląda tak:

MultiIndex 
[(1999-03-31 00:00:00, u'SOLD_PRICE'), (1999-06-30 00:00:00, u'SOLD_PRICE'), (1999-09-30 00:00:00, u'SOLD_PRICE'), (1999-12-31 00:00:00, u'SOLD_PRICE'),..... 

Nie chcę drugiej kolumny jako indeksu. Idealnie byłoby mieć DataFrame z kolumną 1 jako "Data" i kolumną 2 jako "Sprzedaż" (spadek drugiego poziomu indeksu). Nie bardzo wiem, jak zmienić konfigurację indeksu.

+3

tylko ogólne komentarz: nazywania zmiennych o numery wskazujące kolejność, w jakiej używasz ich jest przepis na katastrofę. Zastanów się nad patologicznym przypadkiem, w którym 'pandy' nie ma' DataFrame' lub 'Series' i zostały one po prostu nazwane' DataStructure1' i 'DataStructure2', a wszystkie ich metody zostały po prostu nazwane' method1', 'method2', i tak dalej . Nadanie zmiennym znaczących nazw sprawi, że twój kod będzie czytelny dla innych czytających go po raz pierwszy. Nadanie wymownym nazwom zmiennych pozwala również * użytkownikowi * powrócić do kodu w ciągu miesiąca i szybko wrócić do prędkości. –

+0

Dobra rada, jeszcze raz dziękuję – dartdog

Odpowiedz

30

Wystarczy zadzwonić reset_index():

In [130]: s 
Out[130]: 
0   1 
1999-03-31 SOLD_PRICE NaN 
1999-06-30 SOLD_PRICE NaN 
1999-09-30 SOLD_PRICE NaN 
1999-12-31 SOLD_PRICE  3 
2000-03-31 SOLD_PRICE  3 
Name: 2, dtype: float64 

In [131]: s.reset_index() 
Out[131]: 
      0   1 2 
0 1999-03-31 SOLD_PRICE NaN 
1 1999-06-30 SOLD_PRICE NaN 
2 1999-09-30 SOLD_PRICE NaN 
3 1999-12-31 SOLD_PRICE 3 
4 2000-03-31 SOLD_PRICE 3 

Istnieje wiele sposobów, aby upuścić kolumny:

połączenia reset_index() dwukrotnie i określić kolumnę:

In [136]: s.reset_index(0).reset_index(drop=True) 
Out[136]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

usunąć kolumnę po zresetowaniu indeksu:

In [137]: df = s.reset_index() 

In [138]: df 
Out[138]: 
      0   1 2 
0 1999-03-31 SOLD_PRICE NaN 
1 1999-06-30 SOLD_PRICE NaN 
2 1999-09-30 SOLD_PRICE NaN 
3 1999-12-31 SOLD_PRICE 3 
4 2000-03-31 SOLD_PRICE 3 

In [139]: del df[1] 

In [140]: df 
Out[140]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

połączeń drop() po zresetowaniu:

In [144]: s.reset_index().drop(1, axis=1) 
Out[144]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

Następnie, po tym, jak zresetować indeks, po prostu zmienić nazwę kolumny

In [146]: df.columns = ['Date', 'Sales'] 

In [147]: df 
Out[147]: 
     Date Sales 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31  3 
4 2000-03-31  3 
13

Podczas korzystania podwójne wsporniki, jak

H3 = H2[['SOLD_PRICE']] 

H3 staje się DataFrame. Jeśli użyjesz pojedynczych nawiasów, to wtedy H3 stanie się Serią. Jeżeli H3 to seria, to wynik chec następuje naturalnie:

import pandas as pd 
import numpy as np 
rng = pd.date_range('1/1/2011', periods=72, freq='M') 
H2 = pd.DataFrame(np.arange(len(rng)), index=rng, columns=['SOLD_PRICE']) 
H3 = H2['SOLD_PRICE'] 
H5 = H3.resample('Q', how='count') 
H6 = pd.rolling_mean(H5,4) 
print(H6.head()) 

daje

2011-03-31 NaN 
2011-06-30 NaN 
2011-09-30 NaN 
2011-12-31  3 
2012-03-31  3 
dtype: float64 
+0

+1 Elegancki, jak zwykle :) –

+0

Ja też to lubię !! Trudno wybrać ... Oboje jesteście jak anioły siedzące na moim ramieniu, kiedy walczę, by osiągnąć tempo. To ludzie tacy jak Ty sprawiają, że społeczność Pythona jest tak świetna dla nowych osób.Dziękuję + unutbu i + Phillip Cloud – dartdog

+0

Faktem jest to rozwiązanie, którego używam, ale muszę również zrozumieć, jak lepiej manipulować obiektem serii, który wyjaśnia Phillip. – dartdog

Powiązane problemy