簡體   English   中英

如何根據來自另一列的滾動函數的結果計算pandas DataFrame列的值

[英]How to calculate the values of a pandas DataFrame column depending on the results of a rolling function from another column


一個非常簡單的示例,僅用於理解。

目的是根據來自另一列的滾動函數的結果來計算pandas DataFrame列的值。

我有以下DataFrame:

import numpy as np
import pandas as pd

s = pd.Series([1,2,3,2,1,2,3,2,1])    
df = pd.DataFrame({'DATA':s, 'POINTS':0})

df

DataFrame開始

注意:我什至不知道如何在Stackoverflow編輯窗口中格式化Jupyter Notebook結果的格式,所以我復制並粘貼圖像,請原諒。

DATA列顯示觀察到的數據; 初始化為0的POINTS列用於收集應用於DATA列的“滾動”函數的輸出,如下所述。

設置一個窗口= 4

nwin = 4

僅作為示例, “滾動”函數計算max

現在讓我用一張圖紙來解釋我所需要的。

算法流

對於每次迭代,滾動功能都會計算窗口中數據的最大值; 然后將最大數據的相同索引處的POINT遞增1。

最終結果是:

DataFrame結束

您能幫我用python代碼嗎?

非常感謝您的幫助。
預先感謝您的寶貴時間,
吉爾伯托

PS:您還能建議如何將Jupyter Notebook格式的單元格復制並粘貼到Stackoverflow編輯窗口嗎? 謝謝。

IIUC通過@IanS進行解釋(再次感謝!),您可以執行

In [75]: np.array([df.DATA.rolling(4).max().shift(-i) == df.DATA for i in range(4)]).T.sum(axis=1)
Out[75]: array([0, 0, 3, 0, 0, 0, 3, 0, 0])

要更新列:

In [78]: df = pd.DataFrame({'DATA':s, 'POINTS':0})

In [79]: df.POINTS += np.array([df.DATA.rolling(4).max().shift(-i) == df.DATA for i in range(4)]).T.sum(axis=1)

In [80]: df
Out[80]: 
   DATA  POINTS
0     1       0
1     2       0
2     3       3
3     2       0
4     1       0
5     2       0
6     3       3
7     2       0
8     1       0
import pandas as pd

s = pd.Series([1,2,3,2,1,2,3,2,1])    
df = pd.DataFrame({'DATA':s, 'POINTS':0})

df.POINTS=df.DATA.rolling(4).max().shift(-1)
df.POINTS=(df.POINTS*(df.POINTS==df.DATA)).fillna(0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM