Pandas 按组聚合排序

2023-12-28

我已经看过了这个问题 https://stackoverflow.com/questions/14941366/pandas-sort-by-group-aggregate-and-column,但期望的结果与我的略有不同。

想象一下这样分组的数据框:

df.groupby(['product_name', 'usage_type']).total_cost.sum()

product_name   usage_type
Lorem          A               30.694665
               B                0.000634
               C                1.659360
               D                0.000031
               E             3339.140042
               F                0.074340
Ipsum          G                9.627360
               A               19.053377
               D               14.492155
Dolor          B                9.698245
               H             6993.792163
               C            31947.955679
               D             2150.400001
               E               26.337789
Name: total_cost, dtype: float6

我想要的输出是相同的结构,但具有两个属性:

  1. 按成本总和对产品名称进行排序
  2. 按字典顺序对使用类型进行排序(更好的选择:按成本降序排序)

这样成本最高的产品首先出现,但仍保留细分。

如果它明显更简单,我可以放弃按使用类型进行二次排序。


从分组的 DataFrame 开始:

import pandas as pd
df2 = pd.read_table('data', sep='\s+').set_index(['product_name', 'usage_type'])
#                                   val
# product_name usage_type              
# Lorem        A              30.694665
#              B               0.000634
#              C               1.659360
#              D               0.000031
#              E            3339.140042
#              F               0.074340
# Ipsum        G               9.627360
#              A              19.053377
#              D              14.492155
# Dolor        B               9.698245
#              H            6993.792163
#              C           31947.955679
#              D            2150.400001
#              E              26.337789

您可以将键值存储在新列中:

df2['key1'] = df2.groupby(level='product_name')['val'].transform('sum')
df2['key2'] = df2.index.get_level_values('usage_type')

然后按这些关键列排序:

# >>> df2.sort(['key1', 'key2'], ascending=[False,True])
#                                   val          key1 key2
# product_name usage_type                                 
# Dolor        B               9.698245  41128.183877    B
#              C           31947.955679  41128.183877    C
#              D            2150.400001  41128.183877    D
#              E              26.337789  41128.183877    E
#              H            6993.792163  41128.183877    H
# Lorem        A              30.694665   3371.569072    A
#              B               0.000634   3371.569072    B
#              C               1.659360   3371.569072    C
#              D               0.000031   3371.569072    D
#              E            3339.140042   3371.569072    E
#              F               0.074340   3371.569072    F
# Ipsum        A              19.053377     43.172892    A
#              D              14.492155     43.172892    D
#              G               9.627360     43.172892    G

result = df2.sort(['key1', 'key2'], ascending=[False,True])['val']
print(result)

yields

product_name  usage_type
Dolor         B                 9.698245
              C             31947.955679
              D              2150.400001
              E                26.337789
              H              6993.792163
Lorem         A                30.694665
              B                 0.000634
              C                 1.659360
              D                 0.000031
              E              3339.140042
              F                 0.074340
Ipsum         A                19.053377
              D                14.492155
              G                 9.627360
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 按组聚合排序 的相关文章

随机推荐

  • 包含第三方 iFrame 的安全风险

    包含隐藏的第 3 方 iFrame 会带来哪些应用程序安全风险 如果我理解正确的话 点击劫持对我来说不是问题 因为我拥有父页面 同源策略阻止 3p 框架与我的 dom cookies js 交互 框架是隐藏的 所以我不必担心框架中可能显示的
  • 为 Amazon 的 EC2 实例生成 pem 文件

    对于我们的生产系统 我们运行 Amazon EC2 实例 负责此事的同事 请称他为乔 已离开公司 现在我们想要有ssh访问我们的实例 他给我们留下了他的私人和公共密钥文件 id dsa id dsa pub 在后端我们可以看到 密钥 joe
  • 是否可以确定网络类型(GSM/CDMA)?

    是否可以确定网络类型 GSM 还是 CDMA 我查看了 Core Telephony 但没有看到任何内容 似乎可以找到运营商并从中推断出它 但如果可能的话 我更愿意直接获取类型本身 None
  • AWS SES服务用于使用java发送邮件

    我在使用 AWS SES 邮件发送示例时遇到以下错误 Exception in thread main java lang NoSuchMethodError com amazonaws client AwsSyncClientParams
  • Java SE 上的 JPA:对象:entity.Customer@5e80188f 不是已知的实体类型

    我正在关注 https glassfish java net javaee5 persistence persistence example html https glassfish java net javaee5 persistence
  • 统计/统计 mysql 每天的结果

    假设我有一个名为 的 mysql 表signups 具有以下值 Name Signup Date dog 2008 05 14 18 53 30 cat 2008 05 14 12 13 20 mouse 2008 05 14 08 51
  • Java - 泛型类型 - 类型擦除

    我在oracle网站上找到了以下问题和答案 类型擦除后以下类转换为什么 public class Pair
  • 如何让 OData DELETE 工作?

    我创建了一个 OData 服务 WCF 数据服务 和一个使用者来测试它 以前 当我尝试删除时 收到 WebDAV 405 错误消息 不允许使用方法 所以我用谷歌搜索并发现 http nikhilthaker86 wordpress com
  • 所有 .com 和 .net whois 服务器的列表?

    我正在尝试查找 COM NET 的所有 whois 服务器的列表 威瑞信是 com net name cc 和 tv 域的权威注册机构 可能的解决方案 要找出完整的 whois 服务器列表 需要使用 com 区域文件中的域列表爬取至少一百万
  • PDO 错误:SQLSTATE[HY000]:一般错误:2031

    我遇到了这个恼人的错误 尽管我知道为什么会出现这个错误 但我一生都找不到解决方案 if limit sth gt bindValue page page 1 PDO PARAM INT sth gt bindValue entries pe
  • grails 中的通用方法拦截(特别是控制器)

    我正在尝试在 grails 中创建一个通用函数 它允许我指定类和函数名称 并根据该条件拦截任何函数调用 getSomeClass metaClass invokeMethod String methodName args gt MetaMe
  • 元组对,使用 python 查找最小值

    我想找到按给定列排序的元组列表的最小值 例如 我有一些数据排列为二元组列表 data 1 7 57 2 2 1 3 1 2 4 2 1 5 0 01 6 0 5 7 0 2 8 0 6 如何通过仅比较元组中的第二个数字来找到数据集的最小值
  • 在最后一个选项卡上提交后如何将 primefaces 向导重定向到第一个选项卡

    我正在使用 primefaces 3 2 我已经准备好了向导 可以在数据表的同一页面上插入用户信息 向导逐个选项卡获取信息并在确认选项卡上提交 它还将反映在数据表的同一页面上 它运行良好 现在我需要更新多个用户 为此 我必须将向导从提交按钮
  • 如何通过 Azure 批处理和数据工厂使用 Azure Analysis Services 进行身份验证

    我有一个 c Sharp 类库 它使用 AMO 库连接到 Azure Analysis Services 我想将其用作数据工厂管道的一部分来刷新多维数据集分区 这是通过 Azure 批处理作为自定义 net 活动完成的 var server
  • 为什么恰好一次语义不可行?

    在 Erlang 希望最好的 RPC 语义中 SUN RPC 具有至少一次 Java RMI 具有最多一次 但没有人拥有恰好一次语义 为什么拥有一次语义似乎不可行 例如 如果客户端不断重新发送唯一标记的请求 直到收到答复 并且服务器会跟踪所
  • 如何在OSX下使用brew安装opencv2

    最近 我使用以下命令安装了opencv brew install opencv 我发现opencv3安装在目录中 usr include and usr lib 但我想要的是opencv2 如何安装opencv2brew命令 找到答案的最简
  • 编程中的削减有那么糟糕吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这学期我正在学习人工智能课程 其中我们学习 Prolog 我们的讲师告诉我们要尽量避免在作业中使用删减 但是 对于一些问题我似乎无法避免使用它们
  • Fgets 错误 段错误

    是否有任何原因导致较早编译的程序因 fgets 而在某个点出现段错误 我根本没有更改任何与之相关的代码 突然我相信它无法打开文件 但我像十五分钟前一样用该文件测试了它 我所做的只是添加了搜索功能 所以我不明白问题是什么 它可能是我通过 Pu
  • 在c#中将JSON列表解析为int数组

    我在将 JSON 数字列表读入 c int 数组时遇到问题 我已经尝试过 SO 的一些建议 但没有一个有效 我该如何使用 JSON net 来解决这个问题 从 JSON 文件中提取 course Norsk grades 6 3 5 6 2
  • Pandas 按组聚合排序

    我已经看过了这个问题 https stackoverflow com questions 14941366 pandas sort by group aggregate and column 但期望的结果与我的略有不同 想象一下这样分组的数