【问题标题】:Pandas dataframe cumprod by columnsPandas 数据框 cumprod 按列
【发布时间】:2022-01-23 17:37:19
【问题描述】:

我有一个 daframe,每年有三项表现。我想添加另一列,其中包含按列累积的产品。 x 的累积乘积为 0.42%。我尝试使用 pandas cumprod 或者 axis=0 和 1 但它给了我一个错误。 有办法做到这一点吗?

2016  2017  2018 
2,00% -3,00% 1,50%
4,00%  2,00% -1,00%
-5,00%  7,00% -2,50%

2016  2017  2018  TOTAL CUMULATED
2,00% -3,00% 1,50% 0,42%
4,00%  2,00% -1,00% 5,02%
-5,00%  7,00% -2,50% -0,89%

这是我的代码,但不正确:

import pandas as pd
import numpy as np
data = [[0.02, -0.03, 1.50], [0.04, 0.02, -1.00], [-0.05, 0.07, -2.50]]
df = pd.DataFrame(data, columns=['2016', '2017', '2018'])
df['TOTAL CUMULATED'] = np.cumprod(1 + df) - 1

它给我:ValueError:错误的项目数通过 3,位置意味着 1

所以,代码不正确,因为它在数据框的末尾添加了一行,而是我想添加另一列与行的 cumprod

【问题讨论】:

  • 你如何计算“总累计”? 2% -3% + 1.5% = 0.5% !为什么是 0.42%?
  • 还显示您的代码并以文本格式提供示例数据(请删除屏幕截图)
  • ...以及您遇到的确切错误。
  • 0,42% 计算公式为:(1+2,00%)*(1-3,00%)*(1+1,50%)-1

标签: python pandas dataframe


【解决方案1】:

这里似乎你想要pandas.prod 而不是np.cumprod。这应该有效:

df['TOTAL CUMULATED'] = (df+1).prod(axis=1) - 1

生产

      2016    2017    2018    TOTAL CUMULATED
--  ------  ------  ------  -----------------
 0    0.02   -0.03   0.015          0.004241
 1    0.04    0.02  -0.01           0.050192
 2   -0.05    0.07  -0.025         -0.0089125

请注意,我必须修复您的 df 构造,因为最后一列已关闭 x100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多