Python Pandas 按列对多索引进行排序,但保留树结构

2024-05-27

使用 pandas 0.20.3,我尝试按列('D')对数据帧的 n 个多级进行排序,其中的值(降序),以便维护组的层次结构。

输入示例:

                    D
A     B     C
Gran1 Par1  Child1  3
            Child2  7
            Child3  2
      Par2  Child1  9
            Child2  2
      Par3  Child1  6
Gran2 Par1  Child1  3
      Par2  Child1  8
            Child2  2
            Child3  3
      Par3  Child1  6
            Child2  8

期望的结果:

                    D
A     B     C
Gran2 Par3  Child2  8
            Child1  6
      Par2  Child1  8
            Child3  3
            Child2  2
      Par1  Child1  3
Gran1 Par1  Child2  7
            Child1  3
            Child3  2
      Par2  Child1  9
            Child2  2
      Par3  Child1  6

与排序和排序多级索引相关的其他问题的解决方案似乎集中于对索引的实际级别进行排序或在对列进行排序时保持索引的顺序。我没有找到多级排序,其中列的值用于按该特定级别的聚合值对索引进行排序。非常感谢任何建议。


您需要创建三个单独的数组并按所有数组的组合进行排序。在这个例子中,我使用 Numpy 的np.lexsort进行排序,然后我使用iloc尊重这种人。最后,我用a[::-1]以获得反向排序。

a = np.lexsort([
    df.D.values,
    df.groupby(level=[0, 1]).D.transform('sum').values,
    df.groupby(level=0).D.transform('sum').values
])

df.iloc[a[::-1]]

                   D
A     B    C        
Gran2 Par3 Child2  8
           Child1  6
      Par2 Child1  8
           Child3  3
           Child2  2
      Par1 Child1  3
Gran1 Par1 Child2  7
           Child1  3
           Child3  2
      Par2 Child1  9
           Child2  2
      Par3 Child1  6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pandas 按列对多索引进行排序,但保留树结构 的相关文章

随机推荐

  • 在不同类的方法之间“共享”变量的正确方法是什么?

    我试图在不同类的方法之间共享变量 但我不知道我是否以正确的方式这样做 基本上 当我想在method2上使用变量时 我必须将它们从A类通过method1 传输 到method2 只需看一下示例 因为我不知道如何正确解释这一点 这是正确的方法吗
  • ARC 项目中出现“Missing [super dealloc]”警告

    我已经将一个项目重构为 ARC 看起来不错 但是有一个对象使用通知中心 我在自定义的 dealloc 方法中删除了观察者 这在非 ARC 项目中效果很好 它也适用于 ARC 但我收到一个疯狂的警告 方法可能缺少 super dealloc
  • 在 UIScrollView 中滚动而不触发 TouchCancelled

    Overview 我正在开发一款 iPhone 游戏 其代码是从另一位开发人员那里继承的 游戏网格是一个 contentSize 为 1000x1000 的 UIScrollView 网格包含通过 OpenGL 的 Texture2D 类在
  • C++ QT libXL 错误:“启动期间程序退出,代码为 0xc0000135”

    我正在尝试编写一个使用 libXL 的 QT 应用程序 但是当我尝试编译时 我收到一个弹出框 显示 During Startup program exited with code 0xc0000135 我已经准确地找出了哪一行导致了问题 它
  • iPhone切换按钮的实现

    我想在我的 iPhone 应用程序中创建一个切换按钮 但是 我不知道最好的方法是什么 我正在考虑两种选择 我可以对 UIButton 进行子类化 这样我就不必实现触摸处理 我可以创建一个返回一个布尔值的方法 指示按钮是处于打开还是关闭状态
  • Java ServiceExecutor 终止条件

    我对 java 执行器很陌生 我正在使用 Java 的 ExecutorService 启动多个线程来处理数据 Executor executor Executors newFixedThreadPool poolSize for int
  • scipy cdist 与稀疏矩阵

    我需要计算两组向量之间的距离 source matrix and target matrix 我有以下几行 当两者source matrix and target matrix属于类型scipy sparse csr csr matrix
  • json 网络前导零(禁用基本转换)

    Json Net 无法正确反序列化带有前导零的数字 例如 number 010 被识别为 8 因为0108 基等于8以 10 为基数 如果看JsonTextReader ParseNumber 你可以看到 long value2 text2
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • 为什么 git 无法识别我的本地存储库?

    我刚刚回到一个我已经使用 Git 大约 6 个月的项目 看到了这个 cd d DEVELOP BlenderAe My repo root git status fatal not a git repository or any of th
  • 当浏览器在后台运行时收到通知时,使用 Firebase 播放声音

    我想知道如何使用 Firebase Cloud Messaging FCM 播放声音 当Chrome Firefox等网络浏览器在后台运行时收到通知消息时 notification while running in the backgrou
  • 如何对 SQL Server 中的数据库进行单元测试?

    有哪些方法呢 您可以使用哪些框架 好吧 我想你的意思是对访问数据库的代码进行单元测试 在这种情况下 有NDbUnit http www ndbunit org 它似乎是 NET 的 DbUnit 克隆 我从来没有使用过它 但是我使用过DbU
  • 如何在 Three.js 中重新调整三角形面的方向

    用更好的例子进行编辑 我使用 Three js 来显示 MRI 胃图像的外壳 外壳是从 vtk 格式的外部文件加载的 这是一个演示 http www menne biomed de uni 3d alphahull html http ww
  • 为什么在这里使用BeginInvoke?

    我正在研究其他人的代码 并且对与多线程有关的任何事情没有太多经验 我遇到了这行代码 BeginInvoke MethodInvoker delegate btnCalibrate PerformClick 我想知道为什么要这样做 因为这样就
  • 未捕获的类型错误:无法设置未定义的属性“[任何 AMD]”

    示例scrollmagic模块 但它也发生在其他模块上 我怀疑这是为了 Babel 但不确定 我们如何重现这个错误 git克隆https github com zurb foundation zurb template https gith
  • 在 gnuplot 中创建仅带有箭头的向量

    如何创建一个没有线条而只有箭头的矢量 有一个名为 nohead 的选项 它删除了箭头的头部 但我想做相反的事情 删除矢量的线并只保留头部 最优选地还能够基于单个数字重新缩放该箭头的大小 找到了一些有用的建议TeX交换 https tex s
  • 如何在没有 API 请求的情况下使用 Nuxt.js 生成 100% 静态网站?

    我正在测试周围Nuxt js https nuxtjs org 生成静态网站 使用API 获取数据时是否可以生成100 静态站点 从而摆脱API和请求 根据我到目前为止的测试 所有文件都已正确生成并托管在Github 页面 https pa
  • 重写方法时,我的自定义代码应该位于 super(base) 之前还是之后

    重写方法时 我的自定义代码应该在对父类的超级 基 调用之前还是之后 这里有 3 个选择 如果你想执行代码之前的基本行为 然后之前调用它 如果你想执行代码后的基本行为 然后调用它 如果你想完全覆盖基本行为 根本不调用它 重要的是还检查您的 A
  • Sidekiq 停止一项正在运行的作业

    所以我需要停止running以编程方式 而非预定的 在 Sidekiq 3 1 2 中进行作业 我确实阅读了 API 文档 但没有真正找到有关取消正在运行的作业的任何内容 sidekiq 可以做到这一点吗 当这不可能直接实现时 我的想法是通
  • Python Pandas 按列对多索引进行排序,但保留树结构

    使用 pandas 0 20 3 我尝试按列 D 对数据帧的 n 个多级进行排序 其中的值 降序 以便维护组的层次结构 输入示例 D A B C Gran1 Par1 Child1 3 Child2 7 Child3 2 Par2 Chil