Pandas ripristina l’indice sulla serie per rimuovere il multiindice

Ho creato una Series da un DataFrame , quando ho ricampionato alcuni dati con un conteggio in questo modo: dove H2 è un DataFrame :

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

Questo ha prodotto una serie simile a questa:

 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 

con un indice che assomiglia a:

 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'),..... 

Non voglio la seconda colonna come un indice. Idealmente avrei un DataFrame con la colonna 1 come “Date” e la colonna 2 come “Sales” (lasciando cadere il secondo livello dell’indice). Non vedo come riconfigurare l’indice.

Basta chiamare 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 

Esistono molti modi per rilasciare le colonne:

Chiama reset_index() due volte e specifica una colonna:

 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 

Elimina la colonna dopo aver ripristinato l’indice:

 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 

Call drop() dopo il reset:

 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 

Quindi, dopo aver ripristinato l’indice, rinomina semplicemente le colonne

 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 

Quando si usano parentesi doppie, come

 H3 = H2[['SOLD_PRICE']] 

H3 diventa un DataFrame. Se usi parentesi singole,

 H3 = H2['SOLD_PRICE'] 

allora H3 diventa una serie. Se H3 è una serie, il risultato che desideri segue in modo naturale:

 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()) 

i rendimenti

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