专栏的累计金额和百分比?

Com*_*low 43 python dataframe cumulative-sum pandas

DataFrame喜欢这样的:

df:

 fruit    val1 val2
0 orange    15    3
1 apple     10   13
2 mango     5    5 
Run Code Online (Sandbox Code Playgroud)

我如何让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
Run Code Online (Sandbox Code Playgroud)

我试过了df.cumsum(),但它给了我这个错误:

TypeError:输入类型不支持ufunc'isnan',根据强制转换规则''safe',输入无法安全地强制转换为任何支持的类型

Bre*_*arn 86

df['cum_sum'] = df['val1'].cumsum()
df['cum_perc'] = 100*df['cum_sum']/df['val1'].sum()
Run Code Online (Sandbox Code Playgroud)

这将添加列df.如果需要副本,df请先复制,然后在副本上执行这些操作.

  • 你输入`cumsum`或`cum_sum`了吗? (5认同)
  • 也可能有用的东西:pd.options.display.float_format ='{:.2f}%'.format (4认同)

小智 5

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

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