【问题标题】:Cumulative sum and percentage on column?列上的累计和百分比?
【发布时间】:2014-01-24 17:55:42
【问题描述】:

我有一个这样的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'' 无法安全地将输入强制转换为任何支持的类型

【问题讨论】:

    标签: python pandas dataframe cumulative-sum


    【解决方案1】:
    df['cum_sum'] = df['val1'].cumsum()
    df['cum_perc'] = 100*df['cum_sum']/df['val1'].sum()
    

    这会将列添加到df。如果要副本,先复制df,然后对副本进行这些操作。

    【讨论】:

    • TypeError: unsupported operand type(s) for *: 'int' and 'instancemethod' 第二行
    • 您输入的是cumsum 还是cum_sum
    • 一些可能有用的东西:pd.options.display.float_format = '{:.2f}%'.format
    【解决方案2】:

    这是一个很好的答案,但写于 2014 年。 我只是稍微修改了一下,这样就可以通过编译器了,结果看起来和例子差不多。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2018-04-20
      • 2017-03-06
      相关资源
      最近更新 更多