- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下数据框:
df = pd.DataFrame({'A' : ['1','2','3','7'],
'B' : [7,6,5,4],
'C' : [5,6,7,1],
'D' : [1,9,9,8]})
df=df.set_index('A')
df
B C D
A
1 7 5 1
2 6 6 9
3 5 7 9
7 4 1 8
我正在尝试计算 compound annual growth rate (CAGR) .我试图避免使用列名。这是我想出的:
df['CAGR']=((df[df.columns[-1:]]/df[df.columns[:1]])**(1/len(df.columns)))-1
但是,它会抛出这个错误:
ValueError: Wrong number of items passed 2, placement implies 1
我测试了公式的每一部分,它返回了我需要的列,所以我很困惑。
提前致谢!
最佳答案
您正在以返回对象为 DataFrame
的方式切片 DataFrame
df[df.columns[-1:]]
-1:
导致 df.columns[-1:]
返回 [column_name]
而不是 column_name
。因此,df[df.columns[-1:]]
是一个 DataFrame
。这意味着当您尝试进行除法时,pandas
会尝试排列索引,包括列。为了解决这个问题。你本可以这样做:
df[df.columns[-1]]
使用-1
代替-1:
但是,我会这样做的。
df['CAGR'] = df.iloc[:, -1].div(df.iloc[:, 0]).pow(1./(len(df.columns) - 1)).sub(1)
print df
B C D CAGR
A
1 7 5 1 -0.622036
2 6 6 9 0.224745
3 5 7 9 0.341641
7 4 1 8 0.414214
关于python-3.x - Pandas 通过切片计算 CAGR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355924/
我有一个数据框,其中包含许多公司的年度价格和股息数据。我希望通过将三年内收到的所有股息与期末股价相加,然后计算复合年增长率来计算 3 年年化返回。我知道如何计算 CAGR,但我遇到的问题是将这段时间收
我正在处理公司数据。我有一个大约 1900 家公司(索引)和每家公司 30 个变量(列)的数据集。这些变量总是三个成对出现(三个句点)。基本上看起来像这样 df = pd.DataFrame({'id
给定以下数据框: df = pd.DataFrame({'A' : ['1','2','3','7'], 'B' : [7,6,5,4],
我有以下数据: Company Year Variables Data ABC 2000 Revenue 10 ABC 2001
我是一名优秀的程序员,十分优秀!