python - 如何使用 pandas groupby 并一起移动

标签 python pandas group-by apply

我确定我需要使用某种应用功能,但我正在努力创建一个可以实现此目的的功能。我有一个包含股票代码和月返回率的数据框。我需要计算远期 3 个月的返回。它的结构使得每个月都会有 500(向上)行,其中包含该月的所有股票和返回。我一直在尝试这样的事情,但它没有用。

mr['Quarterly_Returns'] = mr.groupby('ticker')['monthly_returns'].apply(mr['monthly_returns']+mr['monthly_returns'].shift(-1)+mr['monthly_returns'].shift(-2)) 

还有建议?

最佳答案

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

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

一个更完整的例子:

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

关于python - 如何使用 pandas groupby 并一起移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40709456/

相关文章:

python - OpenERP自己的前缀序列

python - 用python数据框中的新结尾替换单词结尾

python - 根据 pandas 中的 if 条件删除数据框列

sql - 当 COUNT(*) 为 NULL 时,在 GROUP BY 中返回 0

python - Pandas Groupby 2 个数据框

python - 把一个字符串变成一个列表

python - 有没有一种方法可以在不使用 Python API 的情况下执行 PyObject 的深层复制(例如通过 C、Rust 等)?

python - 链接 Django Flatpages 的正确方法是什么?

python - (pandas)如何根据三个相似的数据列创建唯一标识符,其中顺序无关紧要?

mysql - 使用Join时如何选择不同的记录?