1.我有以下价格数据,我想计算不同时期的平均交易量。 data
(未编入索引)
日期 | 代码 | 音量 |
---|---|---|
2021-03-29 | AAPL | 80819203.0 |
2021-03-30 | AAPL | 84778972.0 |
2021-03-31 | AAPL | 118323826.0 |
2021-04-01 | AAPL | 75089134.0 |
2021-04-05 | AAPL | 87551744.0 |
2021-04-06 | AAPL | 80171253.0 |
2021-04-07 | AAPL | 83466716.0 |
2021-04-08 | AAPL | 88844591.0 |
2021-04-09 | AAPL | 106686703.0 |
2021-04-12 | AAPL | 91419983.0 |
2021-04-13 | AAPL | 91266545.0 |
2021-04-14 | AAPL | 87222782.0 |
2021-04-15 | AAPL | 89347102.0 |
2021-04-16 | AAPL | 84922386.0 |
2021-04-19 | AAPL | 94264215.0 |
2021-04-20 | AAPL | 94812349.0 |
2021-04-21 | AAPL | 68847136.0 |
2021-04-22 | AAPL | 84566456.0 |
2021-04-23 | AAPL | 78756779.0 |
2021-04-26 | AAPL | 65335049.0 |
2021-04-27 | AAPL | 66015804.0 |
2021-04-28 | AAPL | 107760097.0 |
2021-04-29 | AAPL | 151100953.0 |
2021-04-30 | AAPL | 109839466.0 |
2021-05-03 | AAPL | 75135100.0 |
2021-05-04 | AAPL | 137564718.0 |
2021-05-05 | AAPL | 84000900.0 |
2021-05-06 | AAPL | 78128334.0 |
2021-05-07 | AAPL | 78973273.0 |
2021-05-10 | AAPL | 87457656.0 |
2021-05-11 | AAPL | 125668247.0 |
2021-05-12 | AAPL | 112172282.0 |
2021-05-13 | AAPL | 105861339.0 |
2021-05-14 | AAPL | 81163792.0 |
2021-05-17 | AAPL | 73810407.0 |
2021-05-18 | AAPL | 62455311.0 |
2021-05-19 | AAPL | 90595813.0 |
2021-05-20 | AAPL | 76857123.0 |
2021-05-21 | AAPL | 79295436.0 |
2021-05-24 | AAPL | 62823701.0 |
2021-05-25 | AAPL | 72009482.0 |
2021-05-26 | AAPL | 54464024.0 |
2021-05-27 | AAPL | 93505088.0 |
2021-05-28 | AAPL | 71311109.0 |
2021-06-01 | AAPL | 67637118.0 |
2021-06-02 | AAPL | 58847659.0 |
2021-06-03 | AAPL | 75331115.0 |
2021-06-04 | AAPL | 74505841.0 |
2021-06-07 | AAPL | 70340619.0 |
2021-06-08 | AAPL | 72754129.0 |
2.然后我创建另一个 df - indicators
,它只包含 date 和 ticker 列(不再索引)
indicators = pd.DataFrame()
indicators['ticker'] = data['ticker']
indicators['date'] = data['date']
而不是写:
indicators['avg_vol_5'] = data['volume'].rolling(5).mean()
indicators['avg_vol_10'] = data['volume'].rolling(10).mean()
3.我创建了一个函数来让这个过程看起来更好:
def calcAvgs(list_periods, col_name, avg_name):
for i in list_periods:
indicators[avg_name + '_' + str(i)] = data[col_name].rolling(i).mean()
4.我在执行函数时输入以下数据:
calcAvgs([5, 10, 20, 30, 60, 90], 'volume', 'avg_vol')
data
是包含价格数据的 df。 indicators
是我保存指标数据的 df。
如果我只是想打印计算方 data[col_name].rolling(i).mean()
的结果,一切看起来都没有问题。问题是,当我将结果分配给 indicators[avg_name + '_' + str(i)]
- 在计算时创建的所需列时,我得到的结果只是 NaN。
关于为什么会发生这种情况的任何想法将不胜感激。
答案 0 :(得分:0)
在运行我的函数之前索引表解决了我的问题:
data = data.set_index('date')
indicators.index = data.index
indicators = indicators.drop(columns = ['date'])