理解のための非常に単純な例です。他の列のローリング関数の結果に応じてpandas DataFrame列の値を計算する方法
目的は、別の列のローリング関数の結果に応じて、pandas 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ノートブックの結果をフォーマットする方法がわからないので、私はコピー&ペーストイメージ、私はあなたの許しを請う。
カラムは、観測データを示す。 POINTSカラムは、0に初期化され、以下で説明するように、DATAカラムに適用される「ローリング」関数の出力を収集するために使用されます。ただ、例えば= 4
nwin = 4
ウィンドウを設定し
、"ローリング" 機能は、最大を計算します。
ここで、私が必要とするものを説明するために図面を使用しましょう。各反復について
、圧延機能は、ウィンドウ内のデータの最大値を計算します。その後、最大データの同じインデックスにあるPOINTが1
インクリメントされ、最終的な結果は次のとおりです。
あなたは、Pythonのコードで私を助けることができますか?
本当にありがとうございます。
ジルベルトが
、お時間を事前にありがとうございP.S. Jupyterノートブックの書式設定されたセルをStackoverflow編集ウィンドウにコピーアンドペーストする方法も提案できますか?ありがとうございました。
コピー 'プリント(DF)の出力'を編集ウインドウで開き、すべてをツールバーのコード(' {} ')として整形します。 [再現性の良いパンダの例を作る方法](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples)も参照してください。 – IanS
"繰り返しごとにローリング関数がウィンドウ内のデータの最大値を計算し、最大DATAの同じインデックスのPOINTが1だけインクリメントされます。 - 私は理解していない:これは '(df.DATA.rolling(4).max()== df.DATA).astype(int)'によって 'POINTS 'をインクリメントするのではないか?しかし、それはあなたの出力例に合っていません。 –
@AmiTavory、私が理解しているように、最初の3つのローリングウィンドウはインデックス2に最大値を持つので、インデックス2のPOINTSの値は3回インクリメントされます。 4番目のローリングウィンドウはもはやインデックス2をカバーしないので、アルゴリズムは上に移動します。興味深い問題は、私は言うだろう... – IanS