私はDataFrame、Df2
を持っています。私は、以下の列Lead_Lag
のために、最後の10行のそれぞれをチェックしようとしている - これらの行のいずれかにNULL以外の任意の値がありますならば、私は'Y'
に等しくなるように新しい列Position
をしたい:パンダ最終確認N値の行、結果に基づく新しい列
def run_HG_AUDUSD_15M_Aggregate():
Df1 = pd.read_csv(max(glob.iglob(r"C:\Users\cost9\OneDrive\Documents\PYTHON\Daily Tasks\Pairs Trading\HG_AUDUSD\CSV\15M\Lead_Lag\*.csv"), key=os.path.getctime))
Df2 = Df1[['Date', 'Close_HG', 'Close_AUDUSD', 'Lead_Lag']]
Df2['Position'] = ''
for index,row in Df2.iterrows():
if Df2.loc[Df2.index.shift(-10):index,"Lead_Lag"].isnull():
continue
else:
Df2.loc[index, 'Position'] = "Y"
サンプルを次のようにデータは次のとおりです。
Date \t Close_HG \t Close_AUDUSD \t Lead_Lag
7/19/2017 12:59 \t 2.7 \t 0.7956 \t
7/19/2017 13:59 \t 2.7 \t 0.7955 \t
7/19/2017 14:14 \t 2.7 \t 0.7954 \t
7/20/2017 3:14 \t 2.7 \t 0.791 \t
7/20/2017 5:44 \t 2.7 \t 0.791 \t
7/20/2017 7:44 \t 2.71 \t 0.7925 \t
7/20/2017 7:59 \t 2.7 \t 0.7924 \t
7/20/2017 8:44 \t 2.7 \t 0.7953 \t Short_Both
7/20/2017 10:44 \t 2.71 \t 0.7964 \t Short_Both
7/20/2017 11:14 \t 2.71 \t 0.7963 \t Short_Both
7/20/2017 11:29 \t 2.71 \t 0.7967 \t Short_Both
7/20/2017 13:14 \t 2.71 \t 0.796 \t Short_Both
7/20/2017 13:29 \t 2.71 \t 0.7956 \t Short_Both
7/20/2017 14:29 \t 2.71 \t 0.7957 \t Short_Both
したがって、この場合には、私は新しい列の最後の2つの値を望みます最後の10行のうちの少なくとも1つの行の値がLead_Lag
列にあるので、'Y'
になるようにしてください。私はロールベースでこれを適用したいと思います - 例えば、行13 '位置'の値は行12-3、行12を見ています。位置12 'エラー:
NotImplementedError: Not supported for type RangeIndex
シフト方法のいくつかのバリエーション(ループの前に定義するなど)を試しても、動作させることはできません。
編集:
N = 10
Df2['Position'] = ''
for index,row in Df2.iterrows():
if (Df2.loc[index-N:index,"Lead_Lag"] != "N").any():
Df2.loc[index, 'Position'] = "Y"
else:
Df2.loc[index, 'Position'] = "N"
値がnull以外に存在する場合は、より」[ツアー] –