python - groupby - Índice de reinicio de pandas en series para eliminar multiindex
pandas reset index (2)
DataFrame
una Series
partir de un DataFrame
, cuando remuestreé algunos datos con un conteo como ese: donde H2
es un DataFrame
:
H3=H2[[''SOLD_PRICE'']]
H5=H3.resample(''Q'',how=''count'')
H6=pd.rolling_mean(H5,4)
Esto produjo una serie que se ve así:
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 índice que se ve así:
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''),.....
No quiero la segunda columna como índice. Idealmente, tendría un DataFrame
con la columna 1 como "Fecha" y la columna 2 como "Ventas" (bajando el segundo nivel del índice). No veo cómo reconfigurar el índice.
Cuando usa corchetes dobles, como
H3 = H2[[''SOLD_PRICE'']]
H3 se convierte en un DataFrame. Si usa corchetes individuales,
H3 = H2[''SOLD_PRICE'']
entonces H3 se convierte en una Serie. Si H3 es una serie, entonces el resultado que deseas sigue naturalmente:
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())
rendimientos
2011-03-31 NaN
2011-06-30 NaN
2011-09-30 NaN
2011-12-31 3
2012-03-31 3
dtype: float64
Simplemente llame a 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
Hay muchas formas de eliminar columnas:
Llame a reset_index()
dos veces y especifique una columna:
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
Eliminar la columna después de restablecer el índice:
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()
después de reiniciar:
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
Luego, después de restablecer su índice, simplemente cambie el nombre de las columnas
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