簡體   English   中英

比較Pandas Dataframe Rows和Dropped具有重疊日期的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM