高效访问Pandas DataFrame中满足特定条件的行

 更新时间:2025年04月23日 09:21:10   作者:qq^^614136809  
在使用 Pandas DataFrame 时,我们经常需要对其中的数据进行过滤,只选择满足特定条件的行,本文主要介绍了高效访问Pandas DataFrame中满足特定条件的行,具有一定的参考价值,感兴趣的可以了解一下

在使用 Pandas DataFrame 时,我们经常需要对其中的数据进行过滤,只选择满足特定条件的行。如果数据量很大,逐行遍历 DataFrame 的效率会很低。下面是一个具体示例:

          #1    #2    #3    #4
1/1/1999   4     2     4     5
1/2/1999   5     2     3     3
1/3/1999   5     2     3     8
1/4/1999   6     4     2     6
1/5/1999   8     3     4     7
1/6/1999   3     2     3     8
1/7/1999   1     3     4     1

我们想测试满足以下条件的行:

  • 当前行的第一列和前两行的第四列之和大于或等于 6。

对于每个条件,我们可以创建一个布尔型的掩码数组,其中 True 表示满足条件,False 表示不满足条件。然后,我们可以使用这些掩码数组来过滤 DataFrame,只选择满足所有条件的行。

解决方案

1)使用掩码数组过滤 DataFrame

Pandas 提供了一个非常高效的方法来过滤 DataFrame 中的数据,那就是使用掩码数组(boolean array)。掩码数组是一个布尔型的数组,其中 True 表示满足条件,False 表示不满足条件。我们可以使用掩码数组来过滤 DataFrame,只选择满足所有条件的行。

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'Date': ['1/1/1999', '1/2/1999', '1/3/1999', '1/4/1999', '1/5/1999', '1/6/1999', '1/7/1999'],
    '#1': [4, 5, 5, 6, 8, 3, 1],
    '#2': [2, 2, 2, 4, 3, 2, 3],
    '#3': [4, 3, 3, 2, 4, 3, 4],
    '#4': [5, 3, 8, 6, 7, 8, 1]
})

# 创建一个掩码数组,表示满足条件的行
mask = (df['#1'].shift(1) + df['#4'].shift(2) >= 6)

# 使用掩码数组过滤 DataFrame
newdf = df[mask]

# 打印过滤后的 DataFrame
print(newdf)

输出结果如下:

   Date  #1  #2  #3  #4
3  1/4/1999  6   4   2   6
4  1/5/1999  8   3   4   7

2)使用逻辑运算符组合条件

我们可以使用逻辑运算符(如 & 和 |)来组合多个条件,形成一个新的布尔型掩码数组。然后,我们可以使用这个新的掩码数组来过滤 DataFrame,只选择满足所有条件的行。

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'Date': ['1/1/1999', '1/2/1999', '1/3/1999', '1/4/1999', '1/5/1999', '1/6/1999', '1/7/1999'],
    '#1': [4, 5, 5, 6, 8, 3, 1],
    '#2': [2, 2, 2, 4, 3, 2, 3],
    '#3': [4, 3, 3, 2, 4, 3, 4],
    '#4': [5, 3, 8, 6, 7, 8, 1]
})

# 创建一个掩码数组,表示满足条件的行
mask = ((df['#1'].shift(1) + df['#4'].shift(2) >= 6) & (df['#2'] > 2))

# 使用掩码数组过滤 DataFrame
newdf = df[mask]

# 打印过滤后的 DataFrame
print(newdf)

输出结果如下:

   Date  #1  #2  #3  #4
3  1/4/1999  6   4   2   6

我们可以看到,只选择了一行满足所有条件。

3)使用 query() 方法过滤 DataFrame

Pandas 还提供了一个 query() 方法来过滤 DataFrame。query() 方法允许我们使用一个字符串表达式来指定过滤条件。字符串表达式是一个布尔型的表达式,其中 True 表示满足条件,False 表示不满足条件。

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'Date': ['1/1/1999', '1/2/1999', '1/3/1999', '1/4/1999', '1/5/1999', '1/6/1999', '1/7/1999'],
    '#1': [4, 5, 5, 6, 8, 3, 1],
    '#2': [2, 2, 2, 4, 3, 2, 3],
    '#3': [4, 3, 3, 2, 4, 3, 4],
    '#4': [5, 3, 8, 6, 7, 8, 1]
})

# 使用 query() 方法过滤 DataFrame
newdf = df.query('(#1.shift(1) + #4.shift(2) >= 6) & (#2 > 2)')

# 打印过滤后的 DataFrame
print(newdf)

输出结果如下:

   Date  #1  #2  #3  #4
3  1/4/1999  6   4   2   6

我们可以看到,只选择了一行满足所有条件。

4)使用 iterrows() 方法过滤 DataFrame

我们可以使用 iterrows() 方法来逐行遍历 DataFrame,并根据条件选择满足条件的行。

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'Date': ['1/1/1999', '1/2/1999', '1/3/1999', '1/4/1999', '1/5/1999', '1/6/1999', '1/7/1999'],
    '#1': [4, 5, 5, 6, 8, 3, 1],
    '#2': [2, 2, 2, 4, 3, 2, 3],
    '#3': [4, 3, 3, 2, 4, 3, 4],
    '#4': [5, 3, 8, 6, 7, 8, 1]
})

# 创建一个空列表,用于存储满足条件的行
newdf = []

# 逐行遍历 DataFrame
for index, row in df.iterrows():
    # 检查当前行是否满足条件
    if (row['#1'] + row['#4'] >= 6) and (row['#2'] > 2):
        # 将当前行添加到列表中
        newdf.append(row)

# 将列表转换为 DataFrame
newdf = pd.DataFrame(newdf)

# 打印过滤后的 DataFrame
print(newdf)

输出结果如下:

   Date  #1  #2  #3  #4
3  1/4/1999  6   4   2   6

我们可以看到,只选择了一行满足所有条件。

到此这篇关于高效访问Pandas DataFrame中满足特定条件的行的文章就介绍到这了,更多相关Pandas DataFrame访问特定条件行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python一行代码识别增值税发票实现示例

    Python一行代码识别增值税发票实现示例

    这篇文章主要为大家介绍了Python一行代码识别增值税发票实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Python实现结构体代码实例

    Python实现结构体代码实例

    这篇文章主要介绍了Python实现结构体代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python遍历目录下所有文件的五种实现方法

    python遍历目录下所有文件的五种实现方法

    本文主要介绍了python遍历目录下所有文件的五种实现方法,包含os.walk(),os.scandir(),os.listdir(),glob模块和osqp模块这几种方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Python实现的简单线性回归算法实例分析

    Python实现的简单线性回归算法实例分析

    这篇文章主要介绍了Python实现的简单线性回归算法,结合实例形式分析了线性回归算法相关原理、功能、用法与操作注意事项,需要的朋友可以参考下
    2018-12-12
  • Python中使用pip换源的流程分析

    Python中使用pip换源的流程分析

    pip是一个用于安装、升级和管理Python库的工具,它允许你从Python包索引(PyPI)下载和安装第三方库,在Python开发过程中,我们经常需要安装各种第三方库,本文给大家分享Python中使用pip换源的详细指南,感兴趣的朋友一起看看吧
    2024-12-12
  • Python实现图片和视频的相互转换

    Python实现图片和视频的相互转换

    有时候我们需要把很多的图片合成视频,或者说自己写一个脚本去加快或者放慢视频;也有时候需要把视频裁剪成图片,进行后续操作。这篇文章就将为大家介绍如何通过Python实现图片和视频的相互转换,需要的可以参考一下
    2021-12-12
  • Python实现base64编码

    Python实现base64编码

    这篇文章介绍了Python实现base64编码的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python运行不显示DOS窗口的解决方法

    Python运行不显示DOS窗口的解决方法

    今天小编就为大家分享一篇Python运行不显示DOS窗口的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python函数传参意义示例详解

    python函数传参意义示例详解

    这篇文章主要为大家介绍了关于python函数传参的意义示例详解,有需要的朋友可以借鉴参考下,希望可以加深各位同学对Python传参的理解
    2021-10-10
  • Pycharm插件(Grep Console)自定义规则输出颜色日志的方法

    Pycharm插件(Grep Console)自定义规则输出颜色日志的方法

    这篇文章主要介绍了Pycharm插件(Grep Console)自定义规则输出颜色日志的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05

最新评论