比较熊猫数据框行和删除具有重叠日期的行
问题内容:
我有一个数据框,里面充满了交易策略中的交易。交易策略中的逻辑需要更新,以确保如果该策略已经在交易中就不会进行交易-
但这是另一个问题。许多先前交易的交易数据从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来查看mData为True的subDataFrame,并且仅查看指定的列:
df.loc[msk, ['EntryDate', 'ExitDate']]