python - 计算来自彭博 API 的 python pandas 中选定季度数据的回报
问题描述
目前,我正在使用,并对Python 熊猫数据框Bloomberg API
做一些事情。web crawler
我已经检索了数据,并正在与他们进行一些分析以创建某种模拟。比方说,我有这些数据:
ABC US Equity
2011-01-03 243.00
2011-01-04 243.58
2011-01-05 243.45
2011-01-06 244.28
2011-01-07 244.13
2011-01-10 244.32
2011-01-11 245.83
2011-01-12 246.31
2011-01-13 247.05
2011-01-14 247.39
2011-01-17 249.24
2011-01-18 248.93
2011-01-19 248.68
2011-01-20 248.30
2011-01-21 249.81
...
2011-04-01 437.32
...
2011-07-01 438.40
...
2011-10-03 438.79
...
2012-01-03 438.79
客观的
我想添加基于此标准计算回报的新列:
- 它从季度间隔数据中获取值,在本例中为2011-04-01、2011-07-01、2011-10-03和2011-01-03
- 将它们平均并与2011-01-03的数据相除,并将结果放入2012-01-03的新列中行的新列中
- 它也适用于下一行
期待
ABC US Equity Return
2011-01-03 243.00 #The result should be (average(437.32+438.40+438.79+439.81)/243.00)-1
2011-01-04 243.58 and so on, same calculation on the next row
2011-01-05 243.45 ...
2011-01-06 244.28 ...
2011-01-07 244.13 ...
2011-01-10 244.32
2011-01-11 245.83
2011-01-12 246.31
2011-01-13 247.05
2011-01-14 247.39
2011-01-17 249.24
2011-01-18 248.93
2011-01-19 248.68
2011-01-20 248.30
2011-01-21 249.81
...
2011-04-01 437.32
...
2011-07-01 438.40
...
2011-10-03 438.79
...
2012-01-03 439.81
到目前为止,我只尝试计算平均值,但结果本身仍与我的预期相差甚远
df['Return'] = [
df2.loc[
edt - pd.tseries.offsets.DateOffset(months=4):edt,
'ABC US Equity'].mean()
for edt in df.index
这段代码反而产生了“滚动”的意思,而不是我所期望的。
有人知道如何解决这个问题吗?,我花了几天时间来解决这个问题。我是 Python 新手,如果是基本问题,我深表歉意。
解决方案
您可以使用pd.date_range
来设置比较季度。您只需选择开始日期,选择所需的期间数,然后通过设置freq='BQS'
,即可获得营业季度开始时间:
quarters = pd.date_range(pd.Timestamp(2011,4,1), periods=4, freq='BQS')
然后,您可以将结果列设置为:
(df.loc[df['date_column'].isin(quarters), ['ABC US Equity']]
.apply(lambda x: x.mean()/df['ABC US Equity']-1))
编辑:如果您的日期列是索引,您可以这样做:
df.reindex(quarters).apply(lambda x: x.mean()/df['ABC US Equity']-1)
确保您的索引是日期时间索引。如果不是,你可以这样做:
df.index = pd.to_datetime(df.index)
注意:您的样本包括 2 个日期为 2011-01-03 的值。如果最后一个值有误,您可能希望从 2011-04-01 开始您的季度,这将使您的最后一个季度日期为 2012-01-02。如果它们都有效但您想排除平均值中的第一个,则需要添加.iloc[1:]
到上面的第一行。
推荐阅读
- r - 验证 daterangeinput 以防止结束日期位于开始日期之前
- c++ - 使用“分组”元素迭代向量?
- python - 使用 Python 自动生成虚拟数据
- node.js - 跨上下文创建的数据加载器缓存(graphQl ApolloServer)
- java - @EnableOAuth2Sso 注释 OpenID Connect 是否兼容?
- android - Android:获取我的应用程序本地化的语言列表
- r - 在 R 中使用 lpSolve 的许多最优解
- c# - .net Process.Start 方法仅在从 whithin excel com 插件启动时才在 Excel 2013 中启动 Excel 文件
- python - 一起安装或捆绑命名空间包 (PEP 420)
- c# - FreshMVVM 并在弹出 Modal 之前重置 VM