Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用熊猫的每日价格数据(带有日期戳)计算每周/每月的滚动变化_Python_Pandas - Fatal编程技术网

Python 使用熊猫的每日价格数据(带有日期戳)计算每周/每月的滚动变化

Python 使用熊猫的每日价格数据(带有日期戳)计算每周/每月的滚动变化,python,pandas,Python,Pandas,我有一个每日股票价格数据的数据框架,它有时间戳。想知道最简单的方法来创建新的列,这些列包含此价格数据的每周、每月或年度增长率,但以滚动为基础 请注意,我的每日价格数据仅包括价格发生变化的记录。i、 e.非交易日无记录 例如,我想生成如下内容: | | daily | weekly | monthly | |------------|-------|--------|---------| | 1/01/2000 | 2.00 | NaN | NaN | |

我有一个每日股票价格数据的数据框架,它有时间戳。想知道最简单的方法来创建新的列,这些列包含此价格数据的每周、每月或年度增长率,但以滚动为基础

请注意,我的每日价格数据仅包括价格发生变化的记录。i、 e.非交易日无记录

例如,我想生成如下内容:

|            | daily | weekly | monthly |
|------------|-------|--------|---------|
| 1/01/2000  | 2.00  | NaN    | NaN     |
| 3/01/2000  | 4.05  | NaN    | NaN     |
| 4/01/2000  | 2.10  | NaN    | NaN     |
| 5/01/2000  | 2.15  | NaN    | NaN     |
| 6/01/2000  | 3.20  | NaN    | NaN     |
| 7/01/2000  | 3.25  | 0.625  | NaN     |
| 10/01/2000 | 3.30  | -0.185 | NaN     |
| 11/01/2000 | 3.35  | 0.595  | NaN     |
| 12/01/2000 | 3.40  | 0.581  | NaN     |
| 13/01/2000 | 4.45  | 0.391  | NaN     |
| 14/01/2000 | 2.50  | -0.231 | NaN     |
| 17/01/2000 | 3.55  | 0.076  | NaN     |
| 18/01/2000 | 4.60  | 0.373  | NaN     |
| 19/01/2000 | 2.65  | -0.221 | NaN     |
| 20/01/2000 | 4.70  | 0.056  | NaN     |
| 21/01/2000 | 3.75  | 0.500  | NaN     |
| 24/01/2000 | 2.80  | -0.211 | NaN     |
| 25/01/2000 | 3.85  | -0.163 | NaN     |
| 26/01/2000 | 3.90  | 0.472  | NaN     |    
| 27/01/2000 | 2.95  | -0.372 | NaN     |
| 28/01/2000 | 3.00  | -0.200 | NaN     |
| 31/01/2000 | 4.05  | 0.446  | NaN     |
| 1/02/2000  | 3.10  | -0.195 | 0.550   |
| 2/02/2000  | 3.15  | -0.192 | 0.575   |
| 3/02/2000  | 5.20  | 0.763  | 0.284   |
| 4/02/2000  | 4.25  | 0.417  | 1.024   |
| 7/02/2000  | 5.30  | 0.309  | 0.631   |
| 8/02/2000  | 4.35  | 0.403  | 0.338   |

每周的计算很简单,看起来你可以延迟五天:

shifted = data['daily'].shift(5)
data['weekly'] = (data['daily'] - shifted) / shifted
每月比较困难,因为它似乎是缺少日期的地方,您希望采用上一个可用日期(即2000年2月2日,您将其与2000年1月1日进行比较,因为没有2000年2月1日)。或者至少我认为从结果来看,这就是你想要的。为此,您需要首先使用
data\u range()
reindex()
使用“pad”填充方法填充缺失的日期,以获取前一天的值

data.index = pd.to_datetime(data.index, dayfirst=True)
lag_data = data.reindex(pd.date_range(data.index.min(), data.index.max()), method='pad')
lag_data.index = lag_data.index + pd.DateOffset(31)
monthly = (data['daily'] - lag_data['daily']) / lag_data['daily']
data.join(monthly.rename('monthly'))

太好了,非常感谢。也很容易适应年利率。