我需要计算前5天的“平仓”价格的平均值,并将其存储在下一行的新列“Average_price”中。 对于1950-01-10,我需要计算从1950-01-03到1950-01-09并在1950-01-10中输入'Average_price'。
答案 0 :(得分:1)
设置
stock_data = pd.DataFrame({
'Open': [16.66, 16.85, 16.93, 16.98, 17.08] * 2,
'High': [16.66, 16.85, 16.93, 16.98, 17.08] * 2,
'Low': [16.66, 16.85, 16.93, 16.98, 17.08] * 2,
'Close': [16.66, 16.85, 16.93, 16.98, 17.08] * 2,
'Volume': [1260000.0, 1890000.0, 2550000.0, 2010000.0, 2520000.0] * 2,
'Adj Close': [16.66, 16.85, 16.93, 16.98, 17.08] * 2
}, pd.date_range('1950-01-03', periods=10, freq='B'))
<强>解决方案强>
使用pd.Series.rolling
和pd.Series.shift
stock_data.assign(
Average_price=
stock_data['Adj Close'].rolling(5).mean().shift()
)
Adj Close Close High Low Open Volume Average_price
1950-01-03 16.66 16.66 16.66 16.66 16.66 1260000.0 NaN
1950-01-04 16.85 16.85 16.85 16.85 16.85 1890000.0 NaN
1950-01-05 16.93 16.93 16.93 16.93 16.93 2550000.0 NaN
1950-01-06 16.98 16.98 16.98 16.98 16.98 2010000.0 NaN
1950-01-09 17.08 17.08 17.08 17.08 17.08 2520000.0 NaN
1950-01-10 16.66 16.66 16.66 16.66 16.66 1260000.0 16.9
1950-01-11 16.85 16.85 16.85 16.85 16.85 1890000.0 16.9
1950-01-12 16.93 16.93 16.93 16.93 16.93 2550000.0 16.9
1950-01-13 16.98 16.98 16.98 16.98 16.98 2010000.0 16.9
1950-01-16 17.08 17.08 17.08 17.08 17.08 2520000.0 16.9
答案 1 :(得分:0)
我在pandas
中使用pd.rolling()方法得到了答案avg_price=stock_data.rolling(window=5).mean().shift()['Close']
stock_data['Average_Close_5_days']=avg_price
滚动方法也采用当前行,所以我不得不将行移一行来存储正确的值。
答案 2 :(得分:-1)
这是@piRSquared的一个非常复杂的答案。
我通常使用.loc,因为它更适合索引,并且副本
没有问题stock_data.loc[:, 'Average_price'] = stock_data.loc[:, 'Adj Close'].rolling(window = 5).mean().shift()