python - 比较 Pandas Dataframe 行和删除具有重叠日期的行

标签 python pandas

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

我无法确定哪些行是重复的,然后删除它们。我尝试了 approach in answer 3 of this question运气不错,但这并不理想,因为我必须手动遍历数据框并读取每一行的数据。我目前的方法在下面并且很丑陋。我检查日期,然后将它们添加到新的数据框中。此外,这种方法在最终数据框中提供了多个重复项。

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)

关于如何更有效地完成此任务的任何想法或想法?

您可以 click here如果您想尝试重现我的实际数据框,请查看我的数据样本。

最佳答案

你应该使用某种 bool 掩码来做这种操作。

一种方法是为下一次交易创建一个虚拟列:

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

使用它来创建 mask :

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

然后使用 loc 查看 msk 为 True 的 subDataFrame,并且只查看指定的列:

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

关于python - 比较 Pandas Dataframe 行和删除具有重叠日期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409335/

相关文章:

python - 为什么数据字典的内存开销会是磁盘上相同数据的两倍?

python - 使用分类数据作为 sklearn 逻辑回归中的特征

pythonic方式对数据框中的重复行进行排名然后合并

python - 判断行的两列是否相等。并创建 bool 列

Python:如何将非数字字符转换为空格

python - pandas 自定义 idxmax() 函数,具有特殊的相等性处理

python - fftpack 中缺少 scipy 函数

python - 读取文件并转换值 "'列表'对象没有属性 'find'”

python - 如何从巨大的(scipy.sparse)矩阵计算对角线度矩阵?

python - pandas 在 grouby 之后按日期时间过滤