[英]Comparing Pandas Dataframe Rows & Dropping rows with overlapping dates
我有一個數據框,里面填充了交易策略中的交易。 需要更新交易策略中的邏輯,以確保如果策略已經在交易中,則不會進行交易 - 但這是一個不同的問題。 許多先前交易的交易數據從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)
關於如何更有效地實現這一目標的任何想法或想法?
如果您想嘗試重現我的實際數據幀,可以單擊此處查看我的數據樣本。
您應該使用某種布爾掩碼來執行此類操作。
一種方法是為下一筆交易創建一個虛擬列:
df['EntryNextTrade'] = df['EntryDate'].shift()
使用它來創建蒙版:
msk = df['EntryNextTrade'] > df'[ExitDate']
並使用loc查看msk為True的subDataFrame,並且僅查看指定的列:
df.loc[msk, ['EntryDate', 'ExitDate']]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.