繁体   English   中英

基于交替列从 pandas DataFrame 中删除行

[英]Drop rows from pandas DataFrame based on alternating columns

我正在尝试删除 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,依此类推。

您可以使用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

尝试这个:

 entry = df[df['Entry']]
 exit = df[df['Exit']]
 idx = []
 pos = 0
for i in range(entry.shape[0]):
    if i % 2 == 0:
        print("bad")
        idx.append([entry.iloc[pos][0],entry.iloc[pos][1]])
    else:
        idx.append([exit.iloc[pos][0],exit.iloc[pos][1]])
        pos += 1

,希望有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM