python - tablas - ¿Cómo cambiar el valor del índice de cuadros de datos de Pandas?
recorrer data frame pandas (1)
Tengo un df
:
>>> df
sales cash
STK_ID RPT_Date
000568 20120930 80.093 57.488
000596 20120930 32.585 26.177
000799 20120930 14.784 8.157
Y desea cambiar el valor del índice de la primera fila de (''000568'',''20120930'')
a (''000999'',''20121231'')
. El resultado final será:
>>> df
sales cash
STK_ID RPT_Date
000999 20121231 80.093 57.488
000596 20120930 32.585 26.177
000799 20120930 14.784 8.157
¿Cómo lograr esto?
Con esta configuración:
import pandas as pd
import io
text = ''''''/
STK_ID RPT_Date sales cash
000568 20120930 80.093 57.488
000596 20120930 32.585 26.177
000799 20120930 14.784 8.157
''''''
df = pd.read_csv(io.BytesIO(text), delimiter = '' '',
converters = {0:str})
df.set_index([''STK_ID'',''RPT_Date''], inplace = True)
El índice, df.index
se puede reasignar a un nuevo MultiIndex
como este:
index = df.index
names = index.names
index = [(''000999'',''20121231'')] + df.index.tolist()[1:]
df.index = pd.MultiIndex.from_tuples(index, names = names)
print(df)
# sales cash
# STK_ID RPT_Date
# 000999 20121231 80.093 57.488
# 000596 20120930 32.585 26.177
# 000799 20120930 14.784 8.157
O bien, el índice podría convertirse en columnas, los valores en las columnas podrían reasignarse y luego las columnas regresarían a los índices:
df.reset_index(inplace = True)
df.ix[0, [''STK_ID'', ''RPT_Date'']] = (''000999'',''20121231'')
df = df.set_index([''STK_ID'',''RPT_Date''])
print(df)
# sales cash
# STK_ID RPT_Date
# 000999 20121231 80.093 57.488
# 000596 20120930 32.585 26.177
# 000799 20120930 14.784 8.157
El benchmarking con IPython %timeit
sugiere reasignar el índice (el primer método, arriba) es significativamente más rápido que reiniciar el índice, modificar los valores de columna y luego volver a establecer el índice (el segundo método, arriba):
In [2]: %timeit reassign_index(df)
10000 loops, best of 3: 158 us per loop
In [3]: %timeit reassign_columns(df)
1000 loops, best of 3: 843 us per loop