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 ''
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.
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)