Python 比较数据帧行&;删除日期重叠的行

Python 比较数据帧行&;删除日期重叠的行,python,pandas,Python,Pandas,我有一个数据框,里面装满了从交易策略中提取的交易。交易策略中的逻辑需要更新,以确保如果策略已经在交易中,则不会进行交易——但这是另一个问题。许多以前交易的交易数据从csv文件读入数据框 以下是我的数据问题: 我需要对数据帧进行逐行比较,以确定rowX的Entrydate是否小于ExitDate rowX-1 我的数据示例: Row 1: EntryDate ExitDate 2012-07-25 2012-07-27 Row 2: EntryDate ExitDate 2012-07-2

我有一个数据框,里面装满了从交易策略中提取的交易。交易策略中的逻辑需要更新,以确保如果策略已经在交易中,则不会进行交易——但这是另一个问题。许多以前交易的交易数据从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行需要删除,因为它是不应该发生的交易

我很难识别哪些行是重复的,然后删除它们。我很幸运地尝试了这个方法,但并不理想,因为我必须手动迭代数据帧并读取每一行的数据。我目前的方法是下面,是丑陋的,因为可以。我检查日期,然后将它们添加到新的数据框中。此外,这种方法在最终数据帧中提供了多个副本

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)
关于如何更有效地实现这一点,有什么想法或想法吗


如果您想复制我的实际数据帧,可以查看我的数据采样。

您应该使用某种布尔掩码来执行这种操作

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为真的子数据帧,仅查看指定的列:

df.loc[msk, ['EntryDate', 'ExitDate']]

避免循环!对我知道……但这是我开始的唯一方法:)谢谢。现在就试试看。我知道我可以用一些简单明了的方法,这非常有效。非常感谢,因为我是新来的,所以不能投票,但如果可以的话,我会的。