groupby后聚合的列组合

2023-12-22

Question

寻找类似的东西

df.groubpy('key').aggregate(combination(columnA, columnB))

代替

df['combination'] = combination(columnA, columnB)
df.groupby('key')['combination'].aggregate()

唯一的要求是列的组合是在groupby之后计算的。


描述

对于某些情况,我似乎很自然,逻辑上明智,首先进行分组,然后进行聚合。

一个示例是使用相同组的不同列组合的不同聚合函数。

寻找

  1. groupby
  2. 选择列的组合
  3. 使用相应的聚合函数

代替

  1. 创建所有必要的列(对于每个聚合函数)
  2. groupby(对于每个聚合函数)
  3. 应用特定的聚合函数

Example

key     ColumnA  ColumnB
key1       1        1
key2       2        2
key1       3        3
key3       4        4
key2       5        5

#can do
df['combination'] = df.columnA * df.columnB
df.groupby('key').mean()

#looking for
grouped = df.groupby('key')
grouped.mean(columnA * columnB)

好吧,所以我认为你正在寻找的答案是 - 我们不这样做,因为 python 中的矢量化

考虑下面的代码。

现在本质上 - python 通常被优化为以向量化的方式执行某些数学运算(采取numpy or pandas例如) - 这意味着 - 将其应用于整个向量比将其分解为块然后执行它更快。

So e.g. df["A"].mul(df["B"])将比以下更快:df.apply(lambda X: X["A"]*X["B"], axis=0)。分组也是如此——这样更具可扩展性。

尝试下面的代码 - 这本质上就是你所指的 - 所以在之前和之后进行操作groupby(...)。即使您实现了额外的列,矢量化解决方案的扩展速度也非常快 - 处理的行越多,您将看到的差异就越大。

Edit

我在分组数据上添加了矢量化解决方案,所以我们有:

(1) 我们分组,我们逐行懒惰地评估

(2)我们以向量化的方式处理完整的df,我们应用内置聚合函数进行分组

(3)我们分组,我们以向量化的方式处理分组,按组,我们做聚合函数

本质上 - 从结果中我们看到分解成块会减慢处理速度,无论是按组还是按记录 - 因此矢量化解决方案比我们可以在其上应用的任何类型的自定义解决方案都具有更好的扩展性。

import pandas as pd
import numpy as np
import time

x=np.random.randint(1,9,(3000,5))
df=pd.DataFrame(x, columns=[f"column{l}" for l in list("ABCDE")])
df["cat"]=np.random.choice([f"key{l}" for l in list("ABCDEFG")], size=3000)
df2=df3=df
#print(df)
s=time.time()
df.groupby("cat").apply(lambda z: np.prod(z.values, axis=1).mean()).pipe(print)
e=time.time()-s
print(f"method 1: {e} s")

s=time.time()
df2["prod"]=np.prod(df[[f"column{l}" for l in list("ABCDE")]], axis=1)
df2.groupby("cat")["prod"].mean().pipe(print)
e=time.time()-s
print(f"method 2: {e} s")

s=time.time()
df3=list(map(lambda x: (x[0], np.prod(x[1][[f"column{l}" for l in list("ABCDE")]], axis=1).mean()), df3.groupby("cat")))
print(df3)
e=time.time()-s
print(f"method 3: {e} s")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

groupby后聚合的列组合 的相关文章

随机推荐

  • 使用 rustc 和 clang 运行 LLVM 文件

    我正在尝试运行 ll文件带有 clang 并出现链接器错误 我有一个文件test rs它只包含一个 main 函数println 陈述 我使用以下命令生成 LLVM IRrustc emit llvm ir crate type bin t
  • 用于字符串插值的 Swift 协议

    我必须实现什么协议来控制 Swift 中字符串插值中对象的表示方式 我不想指定打印的内容 如下所示 struct A var a A println a 您需要实施Printable协议 该协议应该被那些希望定制自己的类型的类型所采用 文本
  • 为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?

    我的 vStack 滚动视图在没有 GeometryReader 的情况下也能工作 在 AppleTV 中 我没有在 iOS 中进行测试 然后我添加了几何读取器 VStack 像 ZStack 一样 折叠 我能做什么来解决这个问题 是的 我
  • ASP.NET MVC 站点地图和/或安全调整

    ASP NET MVC 中是否有与 Web 表单中的 SiteMap 和安全调整功能等效的功能 我刚刚开始学习 MVC 一直在寻找解决方案 以防止在学习时走上错误的道路 Check ASP NET MVC 站点地图提供程序 https gi
  • 将 Param 与参数数组绑定

    我有一个函数可以执行此操作 function registerUser firstName lastName address postcode email password params array firstName lastName a
  • Oracle 中触发器无效

    在对表进行某些更改后 我的数据库中的某些触发器变得无效 但他们似乎仍在工作 我遇到的唯一问题是 如果我使用 SQL Developer 触发器的左侧会出现红叉 表明它们无效 这是一个大问题吗 我知道我可以重新编译触发器来解决这个问题 但我不
  • 为什么我的许可证没有显示?

    In my
  • Asp.Net MVC 验证 - 依赖字段

    我目前正在尝试进行 MVC 验证 并且遇到了一些问题 其中需要一个字段 具体取决于另一个字段的值 下面是一个例子 我还没弄清楚 如果 PaymentMethod Cheque 那么 ChequeName 应该是必需的 否则可以通过 Requ
  • NSMutableArray 线程安全

    在我的应用程序中 我正在从多个线程访问和更改可变数组 一开始 当我尝试使用以下命令访问对象时 它崩溃了objectAtIndex 因为索引超出范围 该索引处的对象已从另一个线程的数组中删除 我在网上搜索了如何解决这个问题 我决定尝试这个so
  • facebook c# sdk - 用户尚未授权应用程序执行此操作

    我正在构建一个控制台应用程序 它将将流发布到页面墙上 问题 我收到 用户尚未授权应用程序执行此操作 我正在使用 opengraph 来获取访问令牌 我错过了什么吗 任何帮助是极大的赞赏 谢谢 constants string apiKey
  • Android 在 AsyncTask onPostExecute 中使用接口返回值[重复]

    这个问题在这里已经有答案了 在下面的代码中我想返回值AsyncTask使用接口 但我得到了错误的值 并且无法返回正确的值onPostExecute 我开发了这个link https stackoverflow com questions 1
  • 无法从 JAVA 连接到 Mongo SSL 副本集

    我正在尝试使用 SSL 加密设置最新版本的 MongoDB 我能够从 mongo shell 进行连接 但是当我从 Java 客户端连接时出现错误 Works mongo admin host mongo1 xxxx com ssl ssl
  • 查看由数字表示的文件的特定行

    好吧 这可能是一件显而易见的事情 但它让我无法理解 因为到目前为止 它可能可以用一种我不知道的更简单的方式来完成 假设有一个 文件 我只想查看该文件的行号 X 上的内容 解决方案是什么 这是我能想到的 head X lt file tail
  • Github文件夹结构更改

    我正在使用 Github 进行网站项目 我已经检查更改有一段时间了 但现在我想更改我的文件夹结构 基本上是更好地组织文件 这会弄乱我的 Github 存储库吗 如果是 那么确保我的版本保持完整并且我的新文件夹结构与 Git 同步的最佳方法是
  • IOCCC 2013 解释美国总统的一行行聚会

    我在上找到了这段代码ioccc http ioccc org 2013 cable1 我什至开始理解它是如何工作的 void main int riguing char acters puts 1 acters int 1 acters 4
  • WSO2 API 管理器 - 无法启动服务器

    我想在我的计算机上安装和使用 WSO2 API Manager 但当我尝试启动服务器时遇到一些问题 我使用 API Manager 3 0 0 版本 并通过 Windows 的 msi 安装它 以下是当我尝试以干净的设置启动服务器时出现的错
  • 有时 - 无法构建 Windows Azure 云服务 - 对象引用未设置为对象的实例?

    我有一个解决方案 其中有工作者角色 一些项目库和云服务 有时我无法构建解决方案 不更改源代码或任何内容 输出窗口显示 1 gt 错误 未将对象引用设置为对象的实例 构建 0 成功 1 失败 2 最新 0 跳过 当我尝试在云服务项目中编辑辅助
  • Nexus 10 - 在 Windows 7 或 Linux 上对 adb 不可见

    adb 无法识别 Windows 7 上的我的 Nexus 10 这是我所做的 安装了 Google 的 SDK 和 USB 驱动程序 Windows 7 将平板电脑视为 Android ADB 接口 单击 关于平板电脑 并单击内部版本号七
  • 使用 <=> 而不是仅仅排序和反转有好处吗?

    这样做有什么好处 如果有的话 books sort firstBook secondBook secondBook lt gt firstBook versus books sort reverse 第二个选项看起来更干净 更容易理解 ed
  • groupby后聚合的列组合

    Question 寻找类似的东西 df groubpy key aggregate combination columnA columnB 代替 df combination combination columnA columnB df g