數據:如何使用熊貓的rolling_std在其觀察中考慮兩列?
{'Open': {0: 159.18000000000001, 1: 157.99000000000001, 2: 157.66, 3: 157.53999999999999, 4: 155.03999999999999, 5: 155.47999999999999, 6: 155.44999999999999, 7: 155.93000000000001, 8: 155.0, 9: 157.72999999999999},
'Close': {0: 157.97999999999999, 1: 157.66, 2: 157.53999999999999, 3: 155.03999999999999, 4: 155.47999999999999, 5: 155.44999999999999, 6: 155.87, 7: 155.0, 8: 157.72999999999999, 9: 157.31}}
代碼:
import pandas as pd
d = #... data above.
df = pd.DataFrame.from_dict(d)
df['Close_Stdev'] = pd.rolling_std(df[['Close']],window=5)
print df
# Close Open Close_Stdev
# 0 157.98 159.18 NaN
# 1 157.66 157.99 NaN
# 2 157.54 157.66 NaN
# 3 155.04 157.54 NaN
# 4 155.48 155.04 1.369452
# 5 155.45 155.48 1.259754
# 6 155.87 155.45 0.975464
# 7 155.00 155.93 0.358567
# 8 157.73 155.00 1.065190
# 9 157.31 157.73 1.189378
問題:
上面的代碼沒有問題。但是,rolling_std
是否有可能將其觀測窗口的因子分解爲Close
的前四個值和Open
的第五個值?基本上,我想rolling_std
來計算其首發網下:
157.98 # From Close
157.66 # From Close
157.54 # From Close
155.04 # From Close
155.04 # Bzzt, from Open.
從技術上講,這意味着觀察名單的最後的值總是最後Close
值。
邏輯/原因:
顯然,這是股票數據。我試圖檢查在標準差的計算中考慮當前交易日的股票的Open
價格是否更好,而不是僅僅檢查前面的Close
s。
所需的結果:
# Close Open Close_Stdev Desired_Stdev
# 0 157.98 159.18 NaN NaN
# 1 157.66 157.99 NaN NaN
# 2 157.54 157.66 NaN NaN
# 3 155.04 157.54 NaN NaN
# 4 155.48 155.04 1.369452 1.480311
# 5 155.45 155.48 1.259754 1.255149
# 6 155.87 155.45 0.975464 0.994017
# 7 155.00 155.93 0.358567 0.361151
# 8 157.73 155.00 1.065190 0.368035
# 9 157.31 157.73 1.189378 1.291464
額外的細節:
這可以很容易地在Excel中通過使用式STDEV.S
並且如在下面的截圖看出選擇號碼來完成。但是,我想要在Python和pandas
中完成(出於個人原因)(我突出顯示F6
,由於Snagit的影響,它不僅可見)。
哇。給我一個半小時來測試這一個。 *絕對*更優雅。 – Manhattan 2014-12-05 04:52:20
太棒了。它工作得很好。我今天學到了一些東西。一個當之無愧的+1和接受! – Manhattan 2014-12-05 05:52:29