Lista acumulativa de una columna usando groupby

Hola, así que tengo el siguiente dataframe:

Fruit metric 0 Apple NaN 1 Apple 100.0 2 Apple NaN 3 Peach 70.0 4 Pear 120.0 5 Pear 100.0 6 Pear NaN 

Mi objective es agrupar por fruta y, en orden, agregar cada valor de metric que no sea nulo a una lista acumulativa con su propia columna separada, de este modo:

  Fruit metric metric_cum 0 Apple NaN [] 1 Apple 100.0 [100] 2 Apple NaN [100] 3 Peach 70.0 [70] 4 Pear 120.0 [120] 5 Pear 100.0 [120, 100] 6 Pear NaN [120, 100] 

He intentado hacer esto:

 df['metric1'] = df['metric'].astype(str) df.groupby('Fruit')['metric1'].cumsum() 

Pero esto da como resultado un DataError: No numeric types to aggregate .

También he intentado hacer esto:

 df.groupby('Fruit')['metric'].apply(list) 

Resultando en:

 Fruit Apple [nan, 100.0, nan] Peach [70.0] Pear [120.0, 100.0, nan] Name: metric, dtype: object 

Pero esto no es acumulativo y no se puede convertir en una columna. Gracias por tu ayuda

Utilizar:

 df['metric'] = df['metric'].apply(lambda x: [] if pd.isnull(x) else [int(x)]) df['metric_cum'] = df.groupby('Fruit')['metric'].apply(lambda x: x.cumsum()) print (df) Fruit metric metric_cum 0 Apple [] [] 1 Apple [100] [100] 2 Apple [] [100] 3 Peach [70] [70] 4 Pear [120] [120] 5 Pear [100] [120, 100] 6 Pear [] [120, 100] 

O:

 a = df['metric'].apply(lambda x: [] if pd.isnull(x) else [int(x)]) df['metric_cum'] = a.groupby(df['Fruit']).apply(lambda x: x.cumsum()) print (df) Fruit metric metric_cum 0 Apple NaN [] 1 Apple 100.0 [100] 2 Apple NaN [100] 3 Peach 70.0 [70] 4 Pear 120.0 [120] 5 Pear 100.0 [120, 100] 6 Pear NaN [120, 100] 
 f = lambda x: pd.Series(x).dropna().astype(int).tolist() c = pd.Series.cumsum df.assign(metric_cum=df.metric.apply(f).groupby(df.Fruit).apply(c)) Fruit metric metric_cum 0 Apple NaN [] 1 Apple 100.0 [100] 2 Apple NaN [100] 3 Peach 70.0 [70] 4 Pear 120.0 [120] 5 Pear 100.0 [120, 100] 6 Pear NaN [120, 100]