python - 根据交替列从 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,依此类推。
解决方案
您可以使用以下方式以旧方式进行操作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
推荐阅读
- java - 为什么这会产生意想不到的返回值?
- python - DBSCAN 标签数量与预测标签不匹配
- java - 在将单个字符串压入堆栈之前将其转换为字符
- c++ - openssl 中已弃用的 AES_ige_encrypt() API 的替代方案
- security - 如何创建 API 密钥和安全密钥?
- pandas - 熊猫合并而不指定“开”
- react-native - 因此,如何使用 react-native-reanimated 为多个元素设置动画?
- c# - 如何使代码在 FOR 循环中运行?而不是那么多的IF
- javascript - 如何使用Javascript从列表中选择一个选项,以便它也触发一个事件
- azure - F0 可以用自定义翻译器做什么?