[英]How to populate a pandas dataframe (dfA) column "A" with values from another dataframe (dfB), depending on column / row values from dfB?
[英]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
注意:我什至不知道如何在Stackoverflow編輯窗口中格式化Jupyter Notebook結果的格式,所以我復制並粘貼圖像,請原諒。
DATA列顯示觀察到的數據; 初始化為0的POINTS列用於收集應用於DATA列的“滾動”函數的輸出,如下所述。
設置一個窗口= 4
nwin = 4
僅作為示例, “滾動”函數計算max 。
現在讓我用一張圖紙來解釋我所需要的。
對於每次迭代,滾動功能都會計算窗口中數據的最大值; 然后將最大數據的相同索引處的POINT遞增1。
最終結果是:
您能幫我用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.