首页 > 解决方案 > 根据交替列从 pandas DataFrame 中删除行

问题描述

我正在尝试根据 bool 进入和退出列在价格数据的时间序列中删除进入和退出点之间的数据框中的所有行。

data = {'Entry': [True,True,True,False,False,False,False,True, False, False, False],
'Exit': [False,False,True,False,False,True,True,False, False, False, True]}

df = pd.DataFrame(data)

    Entry   Exit
0    True  False
1    True  False
2    True   True
3   False  False
4   False  False
5   False   True
6   False   True
7    True  False
8   False  False
9   False  False
10  False   True

所以鉴于上述情况,我想留下

    Entry   Exit
0    True  False
2    True   True
7    True  False
10   False  True

我需要从 Entry 列中获取第一个 True,然后在 Exit 列中获取以下 True,然后在 Entry 列中获取下一个 True,依此类推。

标签: pythonpandasdataframe

解决方案


您可以使用以下方式以旧方式进行操作zip

df = pd.DataFrame(data)
group = None
idx = []

for num, (a, b) in enumerate(zip(df["Entry"], df["Exit"])):
    if a is True and not group:
        idx.append(num)
        group = True
    if b is True and group:
        if idx[-1] != num:
            idx.append(num)
        group = False

print (idx)  # [0, 2, 7, 10]

print (df.loc[idx])
    
    Entry   Exit
0    True  False
2    True   True
7    True  False
10  False   True

推荐阅读