Python 列上的累计总和和百分比?

Python 列上的累计总和和百分比?,python,pandas,dataframe,cumulative-sum,Python,Pandas,Dataframe,Cumulative Sum,我有一个数据帧,如下所示: df: fruit val1 val2 0 orange 15 3 1 apple 10 13 2 mango 5 5 如何让Pandas仅在val1上为我提供累计总和和百分比列 期望输出: df_和_cumsum: fruit val1 val2 cum_sum cum_perc 0 orange 15 3 15 50.00 1 apple 10 13

我有一个
数据帧
,如下所示:

df

 fruit    val1 val2
0 orange    15    3
1 apple     10   13
2 mango     5    5 
如何让Pandas仅在
val1
上为我提供累计总和和百分比列

期望输出:

df_和_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”,并且无法根据强制转换规则“安全”将输入安全强制为任何支持的类型


这将把列添加到
df
。如果您想要一份副本,请先复制
df
,然后在副本上执行这些操作。

这是一个很好的答案,但写于2014年。 我只是修改了一点,这样它就可以通过编译器,结果看起来与示例类似

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

TypeError:第二行的*:'int'和'instancemethod'的操作数类型不受支持。
是否键入了
cumsum
cum\u sum
?可能也有用的内容:pd.options.display.float\u format='{.2f}%'
df['cum_sum'] = df["val1"].cumsum()
df['cum_perc'] = round(100*df.cum_sum/df["val1"].sum(),2)