7

取引戦略から取得した取引で満たされたデータフレームがあります。取引戦略のロジックを更新して、戦略が既に取引されている場合に取引が行われないようにする必要がありますが、それは別の問題です。以前の多くの取引の取引データは、csv ファイルからデータフレームに読み込まれます。

私が持っているデータに対する私の問題は次のとおりです。データフレームの行ごとの比較を行って、rowX の Entrydate が ExitDate rowX-1 より小さいかどうかを判断する必要があります。

私のデータのサンプル:

Row 1:
EntryDate  ExitDate
2012-07-25 2012-07-27 

Row 2:
EntryDate  ExitDate
2012-07-26 2012-07-29

行 2 は発生してはならない取引であるため、削除する必要があります。

重複している行を特定して削除するのに問題があります。この質問の答え 3のアプローチを試してみましたが、運が良かったのですが、データフレームを手動で反復処理して各行のデータを読み取る必要があるため、理想的ではありません。私の現在のアプローチは以下であり、可能な限り醜いです。日付を確認し、新しいデータフレームに追加します。さらに、このアプローチにより、最終的なデータフレームに複数の重複が生じます。

for i in range(0,len(df)+1):
    if i+1 == len(df): break #to keep from going past last row
    ExitDate = df['ExitDate'].irow(i)
    EntryNextTrade = df['EntryDate'].irow(i+1)

    if EntryNextTrade>ExitDate: 
        line={'EntryDate':EntryDate,'ExitDate':ExitDate}
        df_trades=df_trades.append(line,ignore_index=True)

これをより効率的に達成する方法についての考えやアイデアはありますか?

実際のデータフレームを再現したい場合は、ここをクリックしてデータのサンプルを表示できます。

4

1 に答える 1

11

この種の操作を行うには、ある種のブール マスクを使用する必要があります。

1 つの方法は、次の取引のためにダミーの列を作成することです。

df['EntryNextTrade'] = df['EntryDate'].shift()

これを使用してマスクを作成します。

msk = df['EntryNextTrade'] > df'[ExitDate']

そして、loc を使用して、msk が True である subDataFrame と、指定された列のみを調べます。

df.loc[msk, ['EntryDate', 'ExitDate']]
于 2013-10-16T17:25:08.333 に答える