首页 > 编程问答 >任意大小的连续过滤器

任意大小的连续过滤器

时间:2024-08-07 03:54:33浏览次数:9  
标签:python pandas dataframe

我有数据框

ID filter1 filter2
0 False False
1 False True
2 False|| |假 3
4
5
6
7
正确 错误 8
正确 错误 9
错误 错误 10
错误 错误|| |11 False
False 12 False
True 我想找到每个带有filter1=True且连续filter2=True的序列 预期的输出是:| ||ID

过滤器1

过滤器2

预期结果 描述 0
1
False filter1中之前没有True 2 False False
False 3 True False
False 开始条件| ||4 False False False
5 False True True
关闭 ID=3 的条件 6 True|| |True True 在同一行
7 True False False 这里是开始条件
8 True False|| |False 这是开始条件 - 我们再次开始 9
False False False 10 False
False False 11 False
False False 12 False
True True 从 ID=8 开始关闭条件 False
12 False True True Close condition from ID=8

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'ID': range(13),
    'filter1': [False, False, False, True, False, True, True, True, True, False, False, False, True],
    'filter2': [False, True, False, False, True, True, True, False, False, False, False, True, True]
})

# 使用布尔索引和 `cumsum` 查找连续组
df['group'] = (df['filter1'] & df['filter2']).cumsum()

# 过滤掉 `filter1` 为 False 的组
result = df[df['filter1']]['group'].unique()

# 获取每个组的开始和结束 ID
output = df[df['group'].isin(result)].groupby('group')['ID'].agg(['min', 'max'])

# 打印输出
print(output)

这将输出以下结果:

       min  max
group         
2        5    6
3        8   12

此代码的工作原理如下:

  1. 创建连续组:
  2. df['filter1'] & df['filter2'] 创建了一个布尔序列,其中 filter1 filter2 都为 True。
  3. cumsum() 函数计算此布尔序列的累积总和,从而为连续的 True 值创建组。

  4. 过滤掉 filter1 为 False 的组:

  5. df[df['filter1']] 选择 filter1 为 True 的行。
  6. .unique() 获取这些行中的唯一组 ID。

  7. 获取每个组的开始和结束 ID:

  8. df[df['group'].isin(result)] 选择属于已识别组的行。
  9. groupby('group') 按组对数据进行分组。
  10. agg(['min', 'max']) 计算每个组的最小(开始)和最大(结束)ID。

此代码有效地识别了满足条件的连续序列,并为提供了每个序列的开始和结束 ID。

标签:python,pandas,dataframe
From: 78840659

相关文章

  • ArcPro (3.2+) Python 脚本工具中从 .atbx Toolbox 相对导入本地模块
    我设置了一个库和关联的ArcGISToolbox,以便:/root├──Toolbox.atbx├──mylib│└──my_function.py├──my_tools│└──my_gp_script.py我将代码存储库的开发克隆保存在公司共享服务器上的一个位置,并在GitHub上托管一份副本。当我进行更新时,我会......
  • Python vs. R:揭秘机器学习领域的双璧
    一、引言1.1背景介绍随着大数据和人工智能技术的飞速发展,机器学习已经成为了一个热门领域。在机器学习领域,Python和R是两种广泛使用的编程语言。Python因其简洁易读的语法和强大的库支持,成为了最受欢迎的编程语言之一。而R则以其强大的统计分析和数据可视化能力,在统计学......
  • Windows10 安装编译后的 pysqlcipher3-1.2.1 基于 Python 3.8.10
    Windows10安装编译后的pysqlcipher3-1.2.1基于Python3.8.10本文主要是将直接安装编译后的文件,不一定的成功,但是可以尝试使用,若无法直接安装,请参考编译过程,自行编译安装,编译过程见这里安装pysqlcipher3这里用32位举例因为64位安装完全相同,只需要把对应的位数换成64......
  • 【Python】Python基础语法知识点汇集
    Python是一种高级的、解释型的编程语言,以其清晰的语法和代码可读性而闻名。本篇文章将汇集Python编程的基础语法知识点,为初学者提供一个全面的学习指南。......
  • 启动Python 的内置服务器访问本地图片
    要使用Python的内置服务器访问本地图片并正确地显示在浏览器中,你需要将图片文件放在内置服务器的根目录或其子目录中。以下是详细步骤:1.将图片文件复制到服务器根目录:例如,将zheng.jpeg文件复制到一个特定的目录中(例如,你的项目目录)。假设你将图片文件复制到C:\Users\panda......
  • 17:Python数据类型练习题
    #1获取c1,c2相同的元素列表c1=[11,22,33]c2=[22,33,44]foriinc1:ifiinc2:print(i)#2获取c1中有,c2没有的元素列表foriinc1:ifinotinc2:print(i)#3获取c2中有,c1没有的元素列表foriinc2:ifinotinc1:print(i)#4获......
  • (Jmeter新玩法)Python 调 Jmeter执行参数化jmx脚本
    #Python调Jmeter执行参数化jmx脚本importosfromos.pathimportjoinimporttimeimportrefromstringimportTemplatejmeter_Home=r"F:\softtotal\xxx\bin\jmeter.bat"#jmx文件路径currpath=os.path.dirname(os.path.realpath(__file__))#要运行的jmx脚......
  • python爬虫预备知识三-多进程
    python实现多进程的方法:fork、multiprocessing模块创建多进程。os.fork方法os.fork方法只适合于unix/linux系统,不支持windows系统。fork方法调用一次会返回两次,原因在于操作系统将当前进程(父进程)复制出一份进程(子进程),这两个进程几乎完全相同,fork方法分别在父进程和子进程中......
  • PEP 8 – Python 代码风格指南中文版(七)
    编程建议(2) 定义异常时,应该从Exception类继承,而不是从BaseException类继承。直接从BaseException继承的异常通常是那些几乎不应该被捕获的异常。设计异常层次结构时,应该基于捕获异常的代码可能需要进行的区分,而不是基于异常被抛出的位置。目标是通过编程方式回答“出了......
  • Python-记录一次迭代求和
    importitertoolsdefget_result(hope,list_input):""":paramhope:#期望相加所得参数:paramlist_input:#所有数值:return:"""defgenerate_combination(items,length):forcombinationinitertools.co......