首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用熊猫群和一起移动

如何使用熊猫群和一起移动
EN

Stack Overflow用户
提问于 2016-11-20 21:14:08
回答 2查看 1.6K关注 0票数 2

我确信我需要使用某种应用功能,但我很难创建一个实现此功能的应用程序。我有一个数据与股票报价和每月的回报。我需要计算3个月的远期回报。它的结构是这样的,每个月都会有500行(按这个数字加起来),其中包含所有股票和当月的回报。我一直在尝试像这样的东西,但不起作用。

代码语言:javascript
复制
mr['Quarterly_Returns'] = mr.groupby('ticker')['monthly_returns'].apply(mr['monthly_returns']+mr['monthly_returns'].shift(-1)+mr['monthly_returns'].shift(-2)) 

还有建议?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-20 21:23:57

您需要lambda x,而在apply中,列名使用x,因为它只适用于列monthly_returns

代码语言:javascript
复制
mr['Quarterly_Returns'] = mr.groupby('ticker')['monthly_returns']
                            .apply(lambda x: x+x.shift(-1)+x.shift(-2))
票数 0
EN

Stack Overflow用户

发布于 2016-11-20 21:44:02

您还可以考虑使用rolling函数。

mr.groupby('ticker')['monthly_returns'].rolling(3).sum()

一个更完整的例子:

代码语言:javascript
复制
df=pd.concat([pd.DataFrame(index=pd.date_range('1/1/2016','12/31/2016',freq='M'),data={'ticker':x,'return':np.random.rand(12)}) for x in list('ABCD')])
df.groupby('ticker')['return'].rolling(3).sum().unstack('ticker')

ticker  A   B   C   D
2016-01-31  NaN     NaN     NaN     NaN
2016-02-29  NaN     NaN     NaN     NaN
2016-03-31  2.062552    1.508062    1.317836    1.051874
2016-04-30  1.727587    1.856383    1.308263    1.113360
2016-05-31  1.602858    2.112790    1.533763    1.039221
2016-06-30  1.716985    2.403718    1.850741    1.726469
2016-07-31  1.828597    1.809054    1.543079    1.569896
2016-08-31  2.003484    1.531877    1.376907    1.852235
2016-09-30  1.854642    1.319289    1.438446    0.946304
2016-10-31  1.308001    1.718987    1.764252    1.157938
2016-11-30  0.962660    2.255580    1.489076    0.493370
2016-12-31  0.949810    1.753511    1.321650    1.377429
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40709456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档