如何将 pandas 数据分组推广到 3 个以上的维度?

2023-12-23

我正在使用优秀的pandas包来处理大量不同的气象诊断数据,当我将数据拼接在一起时,我很快就耗尽了维度。查看文档,可能是使用MultiIndex可能会解决我的问题,但我不确定如何将其应用到我的情况 - 文档显示了使用随机数据创建 MultiIndex 的示例和DataFrames,但不是具有预先存在的时间序列数据的系列。

背景

我使用的基本数据结构包含两个主要字段:

  • metadata,这是一个由描述数字的键值对组成的字典
  • data,这是一个包含数字本身的 pandas 数据结构。

最小公分母是时间序列数据,因此基本结构有 pandasSeries对象作为data条目,以及metadata字段描述了这些数字的实际情况(例如,根据实验 Test1 预测的 24 小时东太平洋 10 米风速的矢量 RMS 误差)。

我正在考虑采用最小公分母并将各种时间序列粘合在一起,以使结果更有用并允许轻松组合。例如,我可能想查看所有不同的提前期 - 我有一个过滤器例程,它将采用共享相同元数据条目的时间序列except提前期(例如实验、区域等)并返回一个新对象,其中metadata字段仅包含常见条目(即Lead Time已被删除),现在data字段是一只熊猫DataFrame与给出的列标签Lead Time价值。我可以再次扩展它并说我想获取生成的帧和组them仅与另一个不同的条目一起(例如Experiment)给我一只熊猫Panel。对于我的条目,其中项目索引由Experiment来自组成帧的元数据值和对象的新元数据都不包含Lead Time or Experiment.

当我迭代这些复合对象时,我有一个iterseries框架的例程和iterframes当我删除一个维度时,面板会重建适当的元数据/数据配对(即,框架中的系列,其前置时间在各列之间变化,将具有其父级的所有元数据)plus the Lead Time使用从列标签中获取的值恢复字段)。这很好用。

Problem

我已经用完了尺寸(最多 3D 面板),而且我也无法使用诸如dropna一旦面板中的所有内容都对齐即可删除空列(这在绘制汇总统计数据时会导致一些错误)。阅读有关使用 pandas 处理高维数据的内容导致阅读有关MultiIndex及其用途。我已经尝试过文档中给出的示例,但我仍然有点不清楚如何将其应用到我的情况。任何方向都会有用。我希望能够:

  • 结合我的Series基于数据的多索引DataFrame沿着任意数量的维度(这会很棒 - 它将消除一个从系列创建框架的调用,然后再消除另一个从框架创建面板的调用)
  • 迭代生成的多索引DataFrame,删除单个维度,以便我可以重置组件元数据。

编辑 - 添加代码示例

Wes McKinney 下面的答案几乎正是我所需要的 - 问题在于一旦我开始将元素分组在一起,我必须使用的系列支持的存储对象到我的 DataFrame 支持的对象的初始转换。 Data-Frame 支持的类具有以下方法,该方法接受基于系列的对象的列表以及随列变化的元数据字段。

@classmethod
def from_list(cls, results_list, column_key):
    """
    Populate object from a list of results that all share the metadata except
    for the field `column_key`.

    """
    # Need two copies of the input results - one for building the object
    # data and one for building the object metadata
    for_data, for_metadata = itertools.tee(results_list)

    self             = cls()
    self.column_key  = column_key
    self.metadata    = next(for_metadata).metadata.copy()
    if column_key in self.metadata:
        del self.metadata[column_key]
    self.data = pandas.DataFrame(dict(((transform(r[column_key]), r.data)
                                        for r in for_data)))
    return self

一旦我有了这个例程给出的框架,我就可以轻松应用下面建议的各种操作 - 特别实用的是能够使用names场当我 称呼concat- 这消除了在内部存储列键名称的需要 因为它作为该索引维度的名称存储在 MultiIndex 中。

我希望能够实现下面的解决方案,只需获取匹配的系列支持类的列表和键列表,然后按顺序进行分组。但是,我不知道这些列将提前代表什么,所以:

  • 将系列数据存储在一维 DataFrame 中对我来说确实没有意义
  • 我不知道如何设置初始系列 -> 框架分组中的索引名称和列

我可能建议使用pandas.concat连同它的keys将 Series DataFrame 粘合在一起以在列中创建 MultiIndex 的参数:

In [20]: data
Out[20]: 
{'a': 2012-04-16    0
2012-04-17    1
2012-04-18    2
2012-04-19    3
2012-04-20    4
2012-04-21    5
2012-04-22    6
2012-04-23    7
2012-04-24    8
2012-04-25    9
Freq: D,
 'b': 2012-04-16    0
2012-04-17    1
2012-04-18    2
2012-04-19    3
2012-04-20    4
2012-04-21    5
2012-04-22    6
2012-04-23    7
2012-04-24    8
2012-04-25    9
Freq: D,
 'c': 2012-04-16    0
2012-04-17    1
2012-04-18    2
2012-04-19    3
2012-04-20    4
2012-04-21    5
2012-04-22    6
2012-04-23    7
2012-04-24    8
2012-04-25    9
Freq: D}

In [21]: df = pd.concat(data, axis=1, keys=['a', 'b', 'c'])

In [22]: df
Out[22]: 
            a  b  c
2012-04-16  0  0  0
2012-04-17  1  1  1
2012-04-18  2  2  2
2012-04-19  3  3  3
2012-04-20  4  4  4
2012-04-21  5  5  5
2012-04-22  6  6  6
2012-04-23  7  7  7
2012-04-24  8  8  8
2012-04-25  9  9  9

In [23]: df2 = pd.concat([df, df], axis=1, keys=['group1', 'group2'])

In [24]: df2
Out[24]: 
            group1        group2      
                 a  b  c       a  b  c
2012-04-16       0  0  0       0  0  0
2012-04-17       1  1  1       1  1  1
2012-04-18       2  2  2       2  2  2
2012-04-19       3  3  3       3  3  3
2012-04-20       4  4  4       4  4  4
2012-04-21       5  5  5       5  5  5
2012-04-22       6  6  6       6  6  6
2012-04-23       7  7  7       7  7  7
2012-04-24       8  8  8       8  8  8
2012-04-25       9  9  9       9  9  9

那么你有:

In [25]: df2['group2']
Out[25]: 
            a  b  c
2012-04-16  0  0  0
2012-04-17  1  1  1
2012-04-18  2  2  2
2012-04-19  3  3  3
2012-04-20  4  4  4
2012-04-21  5  5  5
2012-04-22  6  6  6
2012-04-23  7  7  7
2012-04-24  8  8  8
2012-04-25  9  9  9

or even

In [27]: df2.xs('b', axis=1, level=1)
Out[27]: 
            group1  group2
2012-04-16       0       0
2012-04-17       1       1
2012-04-18       2       2
2012-04-19       3       3
2012-04-20       4       4
2012-04-21       5       5
2012-04-22       6       6
2012-04-23       7       7
2012-04-24       8       8
2012-04-25       9       9

你可以有任意多个级别:

In [29]: pd.concat([df2, df2], axis=1, keys=['tier1', 'tier2'])
Out[29]: 
             tier1                       tier2                    
            group1        group2        group1        group2      
                 a  b  c       a  b  c       a  b  c       a  b  c
2012-04-16       0  0  0       0  0  0       0  0  0       0  0  0
2012-04-17       1  1  1       1  1  1       1  1  1       1  1  1
2012-04-18       2  2  2       2  2  2       2  2  2       2  2  2
2012-04-19       3  3  3       3  3  3       3  3  3       3  3  3
2012-04-20       4  4  4       4  4  4       4  4  4       4  4  4
2012-04-21       5  5  5       5  5  5       5  5  5       5  5  5
2012-04-22       6  6  6       6  6  6       6  6  6       6  6  6
2012-04-23       7  7  7       7  7  7       7  7  7       7  7  7
2012-04-24       8  8  8       8  8  8       8  8  8       8  8  8
2012-04-25       9  9  9       9  9  9       9  9  9       9  9  9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 pandas 数据分组推广到 3 个以上的维度? 的相关文章

  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac

随机推荐

  • 测试 Django 电子邮件后端

    在我的 settings py 中 我输入 EMAIL BACKEND mailer backend DbBackend 所以即使从from django core mail import send mail the send mail函数
  • Coq 平等实现

    我正在编写一种玩具语言 其中 AST 中的节点可以有任意数量的子节点 Num has 0 Arrow有 2 个 等等 您可以致电这些接线员 此外 AST 中可能只有一个节点被 聚焦 我们对数据类型进行索引Z如果它有焦点 或者H如果没有 我需
  • 在 gpshell 中更改 Global Platform 默认密钥后,java 卡管理器身份验证失败

    我想更改用于加载小程序和向卡管理器发送安全消息的全局平台默认密钥 我可以使用以下命令成功更改我的金雅拓默认 GP 卡密钥 mode 211 enable trace establish context card connect reader
  • 这个 GNU 对三元运算符的扩展有多广泛?

    这是根据以下规则对三元运算进行的 GNU 扩展 维基百科 https en wikipedia org wiki 3F C iMyVal iVal iDft 虽然我完全知道这是一个 GNU 扩展 但有时使用这种特殊语法可能会非常方便 那么
  • 通用工厂方法的类型提示

    我很好奇是否可以通过 Python 中的类型参数推断泛型类型 用于类型提示 例如 考虑一个 相当愚蠢的 工厂方法 from typing import TypeVar Type T TypeVar T class Test1 object
  • Amazon SES 电子邮件地址未经验证

    我从亚马逊服务器开始 开始研究SES 我正在使用 asp net C 并制作了基于代码的教程 我已经检查了域 还检查了将在其中运行测试的电子邮件 因此 当我运行代码时 它会生成以下错误消息 事务失败 服务器响应为 消息被拒绝 电子邮件地址未
  • C++ 函数返回引用

    为什么我不能 不应该将对局部变量的引用返回给函数 是不是因为函数执行完毕临时变量就自动销毁了 const string wrap string s1 const string s2 string temp temp s2 s1 s2 ret
  • Typescript 函数返回类型基于可选参数的存在,而不使用函数重载

    打字稿游乐场 https www typescriptlang org play code C4TwDgpgBAKgmgBQKIH0CMUC8UBE9no4BQoksiqATFrvlcSeNAMIDyAcgCICSM3HNHGy69 7Bg
  • 无法设置浮动操作按钮的渐变背景

    我试图将浮动操作按钮的背景设置为渐变 我已经看到了很多解决方案 但没有一个适合我 无论我尝试什么 它都会向我显示一个黑色的操作按钮 我尝试过将背景设置为彩色 但这也不起作用 我正在尝试创建底部导航栏 My code
  • 如何在 Mono for Android (monodroid) 和 MonoTouch 中使用本机 C++ 库

    我有兴趣使用 Mono for Android 和 MonoTouch 来构建可以利用我拥有的大量 C 本机库的移动应用程序 我可以获得一些有关如何调用方法或将代码合并到 iOS 或 Android 上的最终移动应用程序中的具体说明吗 我在
  • 如何在 C# 中打印用户的输入? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 嘿 我刚刚开始 C 课程 所以我对编程还很陌生 我在打印用户的输入时遇到问题 当我要求用户输入本周跑的英里数时 它会显示输入 然后
  • THREE.js - 旋转移动 3D 球

    我是 THREE js 的新手 对物理学的了解非常少 但我正在尝试构建一个足球游戏引擎 从顶部看 而现在我正在努力处理球的运动 当尝试将球从一侧移动到另一侧时 旋转始终面向一个方向 我不明白如何使其沿其移动方向旋转 我添加了一个简单的代码来
  • CKEditor 中不可删除的元素

    我想知道是否有办法使 CKEditor 4 中的元素 不可删除 我可能有一些像这样的 HTML div class content div class gallery div div 在这种情况下 gallery应该无法删除 content
  • 更新 iPhone 上表格单元格中的值

    如果我在 iPhone 应用程序中设置了一个包含多行的 tableView 我如何才能只更新其中一行 我知道它们在进入视图时会手动刷新 但为了争论计时器倒计时 我希望推出更新 Thanks 感谢您的回答 我找到了另一种方法 通过这样调用 N
  • NuGet 在构建开始之前恢复 PostSharp 包

    我正在使用 PostSharp 并且我的项目文件中有以下目标描述
  • 添加子视图动画

    我有主 UIView 在其中显示不同的数据 然后我放了一个按钮 它显示子视图 如下所示 IBAction buttonClicked id sender UIView newView UIView alloc initWithFrame C
  • 我如何确保我的秘密检索是安全的?

    目前 我正在使用 Terraform 和 Aws Secrets Manager 来存储和检索机密 我想了解我的实施是否安全 如果不安全 如何才能使其更安全 让我用我的尝试来说明 In secrets tf我创建一个像这样的秘密 这需要通过
  • 使用 OraclePreparedStatement 通过 Tomcat 8.5.9 从 java 8 写入 oracle 11.2 数据库?

    我在使用 Java 8 和 Tomcat 8 5 9 写入 Oracle 11 2 数据库时遇到问题 实际上 以下代码对于写入存储过程来说效果很好 但是在直接写入数据库时 出现错误 Context initCtx new InitialCo
  • 以编程方式安装 .mobileconfig

    我正在编写一个应用程序 以便自动执行将 Apple 移动设备连接到 WiFi 网络并将配置文件下载到设备的过程 由于它是自动化的 通过 Native Driver 等 因此所有功能都需要由应用程序本身控制 而不是发送到其他应用程序 例如 设
  • 如何将 pandas 数据分组推广到 3 个以上的维度?

    我正在使用优秀的pandas包来处理大量不同的气象诊断数据 当我将数据拼接在一起时 我很快就耗尽了维度 查看文档 可能是使用MultiIndex可能会解决我的问题 但我不确定如何将其应用到我的情况 文档显示了使用随机数据创建 MultiIn