[英]How can we get weekly and monthly returns based on daily stock closing prices? All my data is in a dataframe
我的dataframe原来是这样的
index ticker Adj Close
Date
2022-01-03 0 AXP 166.056259
2022-01-04 1 AXP 171.387100
2022-01-05 2 AXP 169.560791
2022-01-06 3 AXP 171.114563
2022-01-07 4 AXP 172.579315
或者,如果我重置索引,它看起来像这样。
Date ticker Adj Close
0 2022-01-03 AXP 166.056229
1 2022-01-04 AXP 171.387100
2 2022-01-05 AXP 169.560791
3 2022-01-06 AXP 171.114563
4 2022-01-07 AXP 172.579300
我有 30 只股票的收盘价,DF 的形状是 (1769, 3)。 我可以轻松获得回报和平均回报:
returns = table.pct_change()
mean_returns = returns.mean()
获得每周和每月回报的最简单方法是什么? 一定有某种 df.groupby 'W' 或 'M',然后自动计算收益,但是当我谷歌时,我没有找到很多。 关于如何让它工作数周和数月的任何想法?
您可以将月份和星期提取为单独的列,如下所示,然后您可以将 groupby 与聚合一起使用 first 和 last 这将允许您计算整周的收益(如果您持有股票)
import random
import pandas as pd
value = random.sample(range(1, 80), 79)
begin_date = '2019-10-16'
df = pd.DataFrame({'value': value,
'ticker':'tst',
'date':pd.date_range(begin_date, periods=len(value))})
df['year'] = df['date'].dt.isocalendar().year
df['week'] = df['date'].dt.isocalendar().week
df['month'] = df['date'].dt.month
weekly_increase = df.groupby(['year', 'week']).agg(['first','last'])
weekly_increase['increase'] = (weekly_increase[('value','last')] - weekly_increase[('value','first')]) / weekly_increase[('value','first')]
print(weekly_increase)
结果是
value ticker date month increase
first last first last first last first last
year week
2019 42 5 59 tst tst 2019-10-16 2019-10-20 10 10 10.800000
43 79 3 tst tst 2019-10-21 2019-10-27 10 10 -0.962025
44 58 26 tst tst 2019-10-28 2019-11-03 10 11 -0.551724
45 70 31 tst tst 2019-11-04 2019-11-10 11 11 -0.557143
46 78 62 tst tst 2019-11-11 2019-11-17 11 11 -0.205128
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.