GOOGLE ADS

jueves, 14 de abril de 2022

¿Existe una manera más fácil de manipular el índice de un DataFrame de pandas dentro y fuera de las columnas sin DataFrame.reset_index ()?

Buscando una forma corta y fácil de cambiar índices con columnas. Para configurar un ejemplo

import numpy as np, pandas as pd
n = 5
df = pd.DataFrame(np.arange(0, n ** 2).reshape((n, n)))
df.columns = [f'c{i}' for i in range(n)]
df = df.set_index(['c0', 'c1', 'c2'])
print(df)
c3 c4
c0 c1 c2
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24

ahora a cambiar el indice, para casos simples

# instead of this (long)
df.reset_index().set_index(['c3', 'c4'])
# I want something like this (shorter)
df.change_index(['c3', 'c4'])

y para casos mas complicados

# instead of this (long and verbose)
names = list(df.index.names)
names[names.index('c1')] = 'c3'
df.reset_index().set_index(names)
# something like this
df.change_index('c1', 'c3')

añadir índice

# instead of 
names = list(df.index.names)
names.append('c3')
df.reset_index().set_index(names)
# something like this
df.add_index('c3')

eliminar índice

# instead of 
names = list(df.index.names)
names.remove('c1')
df.reset_index().set_index(names)
# something like this
df.remove_index('c1')


Solución del problema

puede crear su propio método de marco de datos como este.

from pandas.core.base import PandasObject
def change_index(df, index=None):
if index:
return df.reset_index(drop=True).set_index(index)
return df
PandasObject.change_index = change_index

entonces puedes llamar a este método en tu marco de datos

df.change_index(['c0', 'c3'])
c0 c2 c4
c1 c3
1 3 0 2 4
6 8 5 7 9
11 13 10 12 14
16 18 15 17 19
21 23 20 22 24

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...