计算熊猫滚动平均值并将其分配给新的 df 列只返回 NaN

时间:2021-06-14 13:44:56

标签: python pandas dataframe

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,它只包含 dateticker 列(不再索引)

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。

关于为什么会发生这种情况的任何想法将不胜感激。

1 个答案:

答案 0 :(得分:0)

在运行我的函数之前索引表解决了我的问题:

data = data.set_index('date')
indicators.index = data.index
indicators = indicators.drop(columns = ['date'])
相关问题