亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于當前行和之后的 N 行的計算列

基于當前行和之后的 N 行的計算列

HUH函數 2023-06-13 14:56:37
我正在處理 1000 多行股票數據,目前正在將其加載到數據框中(我也是使用 pandas 的新手,但目前它很棒,我仍在學習):          open      high       low     close    volume        date0     339.0500  339.6100  336.6200  337.2300  68054244  2020-08-191     338.3400  339.1000  336.6100  338.6400  38733908  2020-08-182     337.9400  338.3400  336.8517  337.9100  34496002  2020-08-173     336.4100  337.4200  335.6200  336.8400  47260390  2020-08-144     336.6100  338.2514  335.8300  336.8300  41816146  2020-08-13...        ...       ...       ...       ...       ...         ...5229  138.6250  139.1093  136.7812  137.8750   7431500  1999-11-055230  136.7500  137.3593  135.7656  136.5312   7907500  1999-11-045231  136.0000  136.3750  135.1250  135.5000   7222300  1999-11-035232  135.9687  137.2500  134.5937  134.5937   6516900  1999-11-025233  136.5000  137.0000  135.5625  135.5625   4006500  1999-11-01我有一個簡單移動平均線的動態平均值數組,我想根據列的動態選擇對每一行執行該計算,例如,我選擇了一個基于列的 5 天簡單移動平均線open:          open      high       low     close    volume        date       5-day avg0      |339.0500|  339.6100  336.6200  337.2300  68054244  2020-08-19      |337.67|1     >|338.3400|  339.1000  336.6100  338.6400  38733908  2020-08-18     >297.5852     >|337.9400|  338.3400  336.8517  337.9100  34496002  2020-08-17       ...3     >|336.4100|  337.4200  335.6200  336.8400  47260390  2020-08-14       ...4     >|336.6100|  338.2514  335.8300  336.8300  41816146  2020-08-13       ...5229  >138.6250  139.1093  136.7812  137.8750   7431500  1999-11-05         ...我最接近的是:for avg in avgs:            overview[avg] = {}            for i in range(avg):                overview[avg][i] = {}                overview[avg][i] = df.loc[df['date'] <= str((date - td(days=(avg - i)))), ['close']].head(avg).sum(numeric_only=True).div(avg).to_json()但我覺得它有點笨拙,不是一種非常有效的方法。我看過做:df['5-Day Avg'] = df['open'].head(5).sum().div(5) ....但是不會做我想做的事情,因為我不斷地從頂部而不是從當前索引中抓取。
查看完整描述

2 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

您可以對值進行排序并使用df.rolling(5)['open'].mean()


df = df.sort_values('date')

df['5-day avg'] = df.rolling(5)['open'].mean()

df = df.sort_values('date', ascending=False)

df

Out[184]: 

          open      high       low     close    volume        date  5-day avg

0     339.0500  339.6100  336.6200  337.2300  68054244  2020-08-19  337.67000

1     338.3400  339.1000  336.6100  338.6400  38733908  2020-08-18  297.58500

2     337.9400  338.3400  336.8517  337.9100  34496002  2020-08-17  257.26700

3     336.4100  337.4200  335.6200  336.8400  47260390  2020-08-14  216.87900

4     336.6100  338.2514  335.8300  336.8300  41816146  2020-08-13  176.79074

5229  138.6250  139.1093  136.7812  137.8750   7431500  1999-11-05  136.76874

5230  136.7500  137.3593  135.7656  136.5312   7907500  1999-11-04        NaN

5231  136.0000  136.3750  135.1250  135.5000   7222300  1999-11-03        NaN

5232  135.9687  137.2500  134.5937  134.5937   6516900  1999-11-02        NaN

5233  136.5000  137.0000  135.5625  135.5625   4006500  1999-11-01        NaN


查看完整回答
反對 回復 2023-06-13
?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

在具有窗口大小的熊貓中嘗試滾動方法來計算滾動平均值并移動結果。

df['5-Day?Avg']?=?df['open'].rolling(5).mean().shift(periods=-4)



查看完整回答
反對 回復 2023-06-13
  • 2 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號