web-dev-qa-db-fra.com

Somme cumulée et pourcentage sur la colonne?

J'ai un DataFrame comme ceci:

df:

 fruit    val1 val2
0 orange    15    3
1 Apple     10   13
2 mango     5    5 

Comment puis-je obtenir Pandas pour me donner une somme cumulée et une colonne de pourcentage sur seulement val1?

Sortie désirée:

df_with_cumsum:

 fruit    val1 val2   cum_sum    cum_perc
0 orange    15    3    15          50.00
1 Apple     10   13    25          83.33
2 mango     5    5     30          100.00

J'ai essayé df.cumsum(), mais cela me donne cette erreur:

TypeError: ufunc 'isnan' n'est pas pris en charge pour les types d'entrée, et les entrées n'ont pas pu être forcées en toute sécurité à tous les types pris en charge conformément à la règle de transtypage '' sûr ''

46
ComputerFellow
df['cum_sum'] = df['val1'].cumsum()
df['cum_perc'] = 100*df['cum_sum']/df['val1'].sum()

Cela ajoutera les colonnes à df. Si vous voulez une copie, copiez d'abord df puis effectuez ces opérations sur la copie.

92
BrenBarn

C'est une bonne réponse, mais écrite en 2014. Je viens de modifier un peu, donc il peut passer le compilateur et les résultats ressemblent à l'exemple.

df['cum_sum'] = df["val1"].cumsum()
df['cum_perc'] = round(100*df.cum_sum/df["val1"].sum(),2)
4
Gene