Adjuntar una columna calculada a un marco de datos existente
Estoy empezando a aprender Pandas, y estaba siguiendo la preguntaaquí y no pude obtener la solución propuesta para trabajar para mí y obtengo un error de indexación. Esto es lo que tengo
from pandas import *
import pandas as pd
d = {'L1' : Series(['X','X','Z','X','Z','Y','Z','Y','Y',]),
'L2' : Series([1,2,1,3,2,1,3,2,3]),
'L3' : Series([50,100,15,200,10,1,20,10,100])}
df = DataFrame(d)
df.groupby('L1', as_index=False).apply(lambda x : pd.expanding_sum(x.sort('L3', ascending=False)['L3'])/x['L3'].sum())
que da salida a lo siguiente (estoy usando iPython)
L1
X 3 0.571429
1 0.857143
0 1.000000
Y 8 0.900901
7 0.990991
5 1.000000
Z 6 0.444444
2 0.777778
4 1.000000
dtype: float64
Luego, trato de adjuntar el cálculo del número acumulativo bajo la etiqueta "nuevo" como se sugiere en la publicación
df["new"] = df.groupby("L1", as_index=False).apply(lambda x : pd.expanding_sum(x.sort("L3", ascending=False)["L3"])/x["L3"].sum())
Entiendo esto:
2196 value = value.reindex(self.index).values
2197 except:
-> 2198 raise TypeError('incompatible index of inserted column '
2199 'with frame index')
2200
TypeError: incompatible index of inserted column with frame index
¿Alguien sabe cuál es el problema? ¿Cómo puedo reinsertar el valor calculado en el marco de datos para que muestre los valores en orden (descendiendo por "nuevo" para cada etiqueta X, Y, Z.)