对 pandas 中的布尔值进行重新采样

2024-01-05

我遇到了一个属性,我发现在其中重新采样布尔值很奇怪pandas。这是一些时间序列数据:

import pandas as pd
import numpy as np

dr = pd.date_range('01-01-2020 5:00', periods=10, freq='H')
df = pd.DataFrame({'Bools':[True,True,False,False,False,True,True,np.nan,np.nan,False],
                   "Nums":range(10)},
                  index=dr)

所以数据看起来像:

                     Bools  Nums
2020-01-01 05:00:00   True     0
2020-01-01 06:00:00   True     1
2020-01-01 07:00:00  False     2
2020-01-01 08:00:00  False     3
2020-01-01 09:00:00  False     4
2020-01-01 10:00:00   True     5
2020-01-01 11:00:00   True     6
2020-01-01 12:00:00    NaN     7
2020-01-01 13:00:00    NaN     8
2020-01-01 14:00:00  False     9

我本以为在重新采样时可以对布尔列执行简单的操作(如求和),但是(按原样)这会失败:

>>> df.resample('5H').sum()

                    Nums
2020-01-01 05:00:00    10
2020-01-01 10:00:00    35

“Bools”列被删除。我对为什么会发生这种情况的印象是 b/cdtype该列的object。更改可以解决该问题:

>>> r = df.resample('5H')
>>> copy = df.copy() #just doing this to preserve df for the example
>>> copy['Bools'] = copy['Bools'].astype(float)
>>> copy.resample('5H').sum()

                     Bools  Nums
2020-01-01 05:00:00    2.0    10
2020-01-01 10:00:00    2.0    35

但是(奇怪的是)你can仍然通过索引重采样对象来对布尔值求和,而不改变dtype:

>>> r = df.resample('5H')
>>> r['Bools'].sum()

2020-01-01 05:00:00    2
2020-01-01 10:00:00    2
Freq: 5H, Name: Bools, dtype: int64

而且,如果唯一的列是布尔值,您仍然可以重新采样(尽管该列仍然是object):

>>> df.drop(['Nums'],axis=1).resample('5H').sum()

                    Bools
2020-01-01 05:00:00      2
2020-01-01 10:00:00      2

是什么让后两个例子能够发挥作用?我可以看到也许他们更明确一点(“拜托,我真的很想重新尝试这个专栏!”),但我不明白为什么原来resample如果可以完成则不允许该操作。


嗯,追踪表明:

df.resample('5H')['Bools'].sum == Groupby.sum (in pd.core.groupby.generic.SeriesGroupBy)
df.resample('5H').sum == sum (in pandas.core.resample.DatetimeIndexResampler)

和跟踪groupby_function in 分组依据.py https://github.com/pandas-dev/pandas/blob/v1.0.5/pandas/core/groupby/groupby.py表明它相当于r.agg(lambda x: np.sum(x, axis=r.axis)) where r = df.resample('5H')其输出:

                     Bools  Nums  Nums2
2020-01-01 05:00:00      2    10     10
2020-01-01 10:00:00      2    35     35

好吧,实际上,应该是r = df.resample('5H')['Bool'](仅适用于上述情况)

并追踪_downsample函数于重新采样.py https://github.com/pandas-dev/pandas/blob/v1.0.5/pandas/core/resample.py表明它相当于:df.groupby(r.grouper, axis=r.axis).agg(np.sum)其输出:

                     Nums  Nums2
2020-01-01 05:00:00    10     10
2020-01-01 10:00:00    35     35
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 pandas 中的布尔值进行重新采样 的相关文章

随机推荐

  • cython 编译 - 导入与 cimport

    Cython 新手 也许这是一个基本问题 考虑两个例子 两者都取自这个博客在这里 http technicaldiscovery blogspot com 2011 06 speeding up python numpy cython an
  • paramiko 中的管道命令

    如何在 paramiko 中运行管道命令 我正在这样做 statement grep thing file grep thing2 tail 1 last msg conn execute statement 我得到的输出grep thin
  • 将 jquery 选择器存储在变量中

    在下面的示例中stored jQuery selector返回错误的值 是否可以存储选择器而不是结果 js代码 storing the jQuery selectors var container container element1 co
  • 验证对象是否存在于 django 视图中而不返回 404 的正确方法是什么?

    我需要验证对象是否存在并返回该对象 然后基于该对象执行操作 在不返回 404 的情况下执行此操作的正确方法是什么 try listing RealEstateListing objects get slug url slug except
  • 在 SvelteKit 中全局导入图像 url

    我正在尝试以通配符方式导入目录中图像的所有 url 并有两个可能的扩展名 import urls from static images png svg 目前该目录中有三个文件 单独导入它们可以正常工作 当我使用此语法时 找不到文件 无法解析
  • 以编程方式访问所有新的 Chrome 通知

    我以前没有编程 Google Chrome 插件的经验 这就是为什么我从这里开始看看我想要完成的事情是否可能 合理 不过 我在编程方面确实拥有相当广泛的经验 我想要的是 当新的 Chrome 通知 你知道系统托盘上方的这些小弹出窗口 弹出时
  • foursquare API 的 IP 地址范围是多少? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在大学的防火墙后面使用虚拟机开发 Web 服务 我需要知道要向我们的 IT 人员提供的 IP 地址范围 以便我们能够访问 foursquare 的
  • Microsoft Graph Api OAuth 返回状态代码 200 而不是 302(不重定向到登录页面)

    获取 Microsoft Graph API 的令牌 这是第一个调用 让身份验证用户 microsoft 并获取调用令牌服务的代码 请求已正确发送 但不是获取状态代码 302 以便可以将其重定向到登录页面 我收到状态代码 200 publi
  • SQL Profiler 可以与 LocalDB 一起使用吗?

    是否可以使用 SQL Profiler 来观察 LocalDB 实例请求的查询 只要您知道正确的服务器名称 就可以像使用所有其他 SQL 版本一样使用 SQL Profiler 您可以使用以下命令找到服务器名称本地数据库 http tech
  • 参数中缺少必需的键“Bucket”

    我正在尝试将一个简单的 lambda 函数部署到 aws 但收到错误参数中缺少必需的键 Bucket 我创建的用户拥有完整的 Lambda S3 Cloudformation 和 Cloudwatch 访问权限 JS 使用严格 module
  • ExtJS 别名与 id

    我不明白的用法alias http docs sencha com extjs 4 2 1 api Ext Class cfg aliasExtJS 中的 id 与 itemId 配置属性对比 应用程序 视图 foo js Ext defi
  • 获取隐藏字段值的代码隐藏

    如何获取隐藏字段的值
  • 使用 Swift 创建 Flutter 项目

    Flutter 允许支持Swift编程语言 我怎样才能整合我的SwiftAndroid Studio 中 Flutter 项目的代码文件 没有添加 创建 Swift 文件的选项 在NewAndroid Studio 中的菜单 我认为更好的方
  • 比较 Java 中的 2 个字符串是否有分隔符

    字符串 1 func1 test1 字符串2 func1 test2 我想将这两个字符串与第一个左大括号 进行比较 因此 对于给定的示例 它应该返回 true 因为两个字符串中直到 的字符串都是 func1 有没有什么方法可以在不分裂的情况
  • 如何在asp.net core中处理cookie过期

    我想知道如何正确处理cookie过期的情况 是否可以执行自定义操作 我想要实现的是 当 cookie 过期时 从当前 cookie 中取出一些信息 并通过该信息重定向到操作参数 是否可以 没有一个好的方法可以实现这一点 如果 cookie
  • 在 C++ 中处理 CPU 异常

    是否有跨平台的方法来处理 CPU 异常 例如分段错误或除以零 可以说 我需要调用一些潜在不安全的函数 例如从插件文件 这可能会导致段错误 或在执行之前无法测试的一些其他问题 我知道 C 标准库有信号处理函数 但我不知道如何使用它们来处理问题
  • 为什么我收到“无法解析符号”?

    我以前导入过这个项目 没有任何困难 我不确定发生了什么变化 I click Import Project并选择了getting started with selenium http github com ddavison getting s
  • 使用 thymeleaf 中的搜索功能和请求参数

    我有一个页面 可以在其中获取条目列表 现在 我希望能够从这些列表中进行搜索 我当前用于检索列表的网址是 show products 我想在此页面中添加一个搜索表单 以便我可以使用请求参数进行搜索 是的 我可以使用ajax 但我必须使用请求参
  • 从 pdf 中读取证书

    我正在使用 ITextSharp 来从数字签名的 pdf 文档中读取证书信息 The ITextSharp Text Pdf PdfPKCS7类公开三个属性 Certificates 如清单所示 SignCertificate 作为单个对象
  • 对 pandas 中的布尔值进行重新采样

    我遇到了一个属性 我发现在其中重新采样布尔值很奇怪pandas 这是一些时间序列数据 import pandas as pd import numpy as np dr pd date range 01 01 2020 5 00 perio