Estoy tratando de acceder al índice de una fila en una función aplicada en todo un DataFramePandas. Tengo algo como esto:
df = pandas.DataFrame([[1,2,3],[4,5,6]], columns=['a','b','c'])
>>> df
a b c
0 1 2 3
1 4 5 6
y definiré una función que acceda a elementos con una fila determinada
def rowFunc(row):
return row['a'] + row['b'] * row['c']
Puedo aplicarlo así:
df['d'] = df.apply(rowFunc, axis=1)
>>> df
a b c d
0 1 2 3 7
1 4 5 6 34
¡Increíble! Ahora, ¿qué pasa si quiero incorporar el índice en mi función? El índice de cualquier fila dada en esto DataFrameantes de agregar dsería Index([u'a', u'b', u'c', u'd'], dtype='object'), pero quiero el 0 y el 1. Así que no puedo acceder row.index.
Sé que podría crear una columna temporal en la tabla donde almaceno el índice, pero me pregunto si está almacenado en el objeto de fila en algún lugar.

apply? Es mucho más lento que realizar operaciones vectorizadas en el propio marco. (A veces, aplicar es la forma más sencilla de hacer algo, y las consideraciones de rendimiento a menudo se exageran, pero para su ejemplo particular es tan fácil no usarlo)Respuestas:
Para acceder al índice en este caso accedes al
nameatributo:Tenga en cuenta que si esto es realmente lo que está tratando de hacer, lo siguiente funciona y es mucho más rápido:
EDITAR
Si mira esta pregunta más de 3 años después, podría hacer lo siguiente:
pero asumiendo que no es tan trivial como esto, sea lo que sea lo que
rowFuncesté haciendo realmente, debería buscar usar las funciones vectorizadas y luego usarlas contra el índice df:fuente
namefuera una tupla con nombre en el caso de aMultindex, de modo que se pueda consultar un nivel de índice específico por su nombre.Ya sea:
1.
row.namedentro de laapply(..., axis=1)llamada:2. con
iterrows()(más lento)DataFrame.iterrows () le permite iterar sobre filas y acceder a su índice:
fuente
Para responder a la pregunta original: sí, puede acceder al valor de índice de una fila en
apply(). Está disponible bajo la clavenamey requiere que usted especifiqueaxis=1(porque la lambda procesa las columnas de una fila y no las filas de una columna).Ejemplo de trabajo (pandas 0.23.4):
fuente