Python、Pandas:使用 GroupBy.groups 描述将其应用于另一个分组

2023-12-28

让我们考虑一个 DataFrame,它在 2010 年 1 月的每一天包含 1 行 2 个值:

date_range = pd.date_range(dt(2010,1,1), dt(2010,1,31), freq='1D')
df = pd.DataFrame(data = np.random.rand(len(date_range),2), index = date_range)

我将该 DataFrame 拆分为 5 个 DataFrame 的列表,每个 DataFrame 都包含原始数据的 1 周数据:df_weeks = [g for n, g in df.groupby(pd.TimeGrouper('W'))]

如果我输入df.groupby(pd.TimeGrouper('W')).groups我可以看到一个字典解释如何分组:

{Timestamp('2010-01-03 00:00:00', freq='W-SUN'): 3,
 Timestamp('2010-01-10 00:00:00', freq='W-SUN'): 10,
 Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 17,
 Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 24,
 Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 31}

让我们考虑另一个具有稀疏数据但与第一个重叠的 TimeSeries:

observations = pd.DataFrame(data =np.random.rand(5,2), index = (dt(2010,1,12), dt(2010,1,18), dt(2010,1,20), dt(2010,1,22), dt(2010,1,28)))

如果我运行相同的代码obs_weeks = [g for n, g in observations.groupby(pd.TimeGrouper('W'))],显然它会在列表中返回更少的 DataFrame,因为数据覆盖的范围更小。observations.groupby(pd.TimeGrouper('W')).groups返回:

{Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 1,
 Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 4,
 Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 5}

但有没有办法重用第一个 DataFrame.GroupBy 的组将其应用到第二个?即,这意味着在特定情况下最终会出现一个变量obs_weeks包含 5 个数据帧,跨越相同的时间范围df_weeks,其中 2 个是空的?


解决您的问题的一种简单方法是确保观测数据框包含 df 数据框包含的所有日期。您可以使用reindex方法。然后您将拥有完全相同的组。您还可以使用resample('W')代替groupby(pd.Timegrouper('W'))

obs2 = observations.reindex(df.index)

obs2.resample('W').groups

{Timestamp('2010-01-03 00:00:00', freq='W-SUN'): 3,
 Timestamp('2010-01-10 00:00:00', freq='W-SUN'): 10,
 Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 17,
 Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 24,
 Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 31}

如果我们进行简单的聚合(例如求和),我们可以看到两个帧的结果

df.resample('W').sum()

                 0         1
2010-01-03  1.990558  2.555191
2010-01-10  2.707777  3.771756
2010-01-17  2.799897  3.353363
2010-01-24  3.165479  2.778870
2010-01-31  4.946577  3.394211

现在与obs2其中有 2 个缺失组

obs2.resample('W').sum()

                   0         1
2010-01-03       NaN       NaN
2010-01-10       NaN       NaN
2010-01-17  0.172341  0.137136
2010-01-24  1.752472  2.375306
2010-01-31  0.711525  0.124271
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python、Pandas:使用 GroupBy.groups 描述将其应用于另一个分组 的相关文章

  • 如何在序列化器创建方法中获取 URL Id?

    我有以下网址 url r member P
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐