web-dev-qa-db-ja.com

列の累積合計と割合?

次のようなDataFrameがあります。

df

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

Pandasを取得して、_val1_のみの累積合計と割合の列を取得するにはどうすればよいですか?

望ましい出力:

_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
_

私はdf.cumsum()を試しましたが、このエラーが発生しています:

TypeError:ufunc 'isnan'は入力タイプではサポートされておらず、キャストルール '' safe ''に従って、サポートされているタイプに入力を安全に強制変換できませんでした

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

これにより、列がdfに追加されます。コピーが必要な場合は、最初にdfをコピーしてから、コピーに対してこれらの操作を実行します。

92
BrenBarn

それは良い答えですが、2014年に書かれました。私は少し変更しただけなので、コンパイラに合格し、結果は例のようになります。

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