Python Pandas:使用 Aggregate 与 Apply 定义新列

2024-02-16

假设我有一个像这样的数据框:

n = 20
dim1 = np.random.randint(1, 3, size=n)
dim2 = np.random.randint(3, 5, size=n)
data1 = np.random.randint(10, 20, size=n)
data2 = np.random.randint(1, 10, size=n)
df = pd.DataFrame({'a': dim1, 'b': dim2 ,'val1': data1, 'val2': data2})

如果我定义一个按组返回的函数:

def h(x):
    if x['val2'].sum() == 0:
        return 0
    else:
        return (x['val1'].sum())*1.0/x['val2'].sum()*1.0

按其中一列分组并聚合会返回结果:

df.groupby(['a']).aggregate(h)['val1']

尽管它将所有现有列转换为所需的结果,而不是添加新列

使用聚合时按两列分组会导致错误:

df.groupby(['a','b']).aggregate(h)['val1']

KeyError: 'val2'

但将聚合切换为应用似乎有效。

我有两个问题:

  1. 为什么应用有效而不是聚合?
  2. 如果按一组键对数据帧进行分组后,我想使用将组值聚合为新列的函数,那么最好的方法是什么?

提前致谢。


稍微退后一步,执行此特定“聚合”的更快方法是仅使用sum(在 cython 中进行了优化) http://pandas.pydata.org/pandas-docs/stable/groupby.html#cython-optimized-aggregation-functions一些时间。

In [11]: %timeit g.apply(h)
1000 loops, best of 3: 1.79 ms per loop

In [12]: %timeit g['val1'].sum() / g['val2'].sum()
1000 loops, best of 3: 600 µs per loop

IMO groupby 代码非常复杂,通常通过创建所看到的值的列表来懒惰地“黑匣子”查看正在发生的事情:

def h1(x):
   a.append(x)
   return h(x)
a = []

警告:有时此列表中的数据类型不一致(其中pandas 尝试了一些不同的事情在进行任何计算之前)...如本例所示!

第二个聚合被卡住了each列,因此该组(会引发错误):

0     10
4     16
8     13
9     17
17    17
19    11
Name: val1, dtype: int64

这是 val1 列的子系列,其中 (a, b) = (1, 3)。

这很可能是一个错误,在引发这个错误之后,也许它可以尝试其他方法(我怀疑这就是第一个版本起作用的原因,它是特殊情况)......

对于那些有兴趣的人a我得到的是:

In [21]: a
Out[21]: 
[SNDArray([125755456, 131767536,        13,        17,        17,        11]),
 Series([], name: val1, dtype: int64),
 0     10
4     16
8     13
9     17
17    17
19    11
Name: val1, dtype: int64]

我不知道 SNDArray 是怎么回事......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pandas:使用 Aggregate 与 Apply 定义新列 的相关文章

  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • 希伯来语中的稀疏句子标记化错误

    尝试对希伯来语使用稀疏句子标记 import spacy nlp spacy load he doc nlp text sents list doc sents I get Warning no model found for he Onl
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 登录网站并使用 python 请求下载文件

    我有一个带有 HTML 表单的网站 登录后 它会将我带到 start php 站点 然后将我重定向到overview php 我想从该服务器下载文件 当我单击 ZIP 文件的下载链接时 链接后面的地址是 getimage php path
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 如何使用 paramiko 查看(日志)文件传输进度?

    我正在使用 Paramiko 的 SFTPClient 在主机之间传输文件 我希望我的脚本打印文件传输进度 类似于使用 scp 看到的输出 scp my file user host user host password my file 1
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 对数据帧的每 2 小时数据进行 Groupby

    我有一个数据框 Time T201FN1ST2010 T201FN1VT2010 1791 2017 12 26 00 00 00 854 69 0 87 1792 2017 12 26 00 20 00 855 76 0 87 1793
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name

随机推荐

  • 现有项目的 XCTest

    我有一个很大的 大约 700 个模块 iOS 项目 现在我需要对现有代码进行单元测试 在我们没有使用它之前 我已经为我的目标添加了新的 XCTest 测试目标 并开始编写我的第一个测试 但是编译后我遇到了一些链接错误 因为我的项目中的模块没
  • 使用 Swift 的没有情节提要或 xib 文件的 OSX 应用程序

    不幸的是 我没有在互联网上找到任何有用的东西 我想知道 在不使用 Swift 中的 Storyboard 或 XIB 文件的情况下 我实际上需要键入哪些代码来初始化应用程序 我知道我必须有一个 swift文件名为main 但我不知道在那里写
  • 针对特定主机向特定用户发送 Nagios 服务通知

    使用 Nagios 我希望能够在特定主机上的服务出现故障时向用户发送通知 然而 另一台主机上的相同服务应该提醒其他人 例如 HostA 已启动 但 Host 上的 www 服务已关闭 gt 通知 UserS HostB 已启动 并且 Hos
  • 有什么方法可以匹配 Visual Fox Pro 和 C# 的 RAND(INT) 方法。网

    我正在将 Visual Fox Pro 代码迁移到 C 网 Visual Fox Pro 的特点是什么 基于文本字符串 在文本框中捕获 生成一个 5 位数字的字符串 48963 如果您始终输入相同的文本字符串 则该字符串将始终为 5 位数字
  • 设置类型的可变长度参数列表

    好吧 我很确定以前已经以某种方式讨论过这个问题 但我显然太愚蠢了 找不到它 首先 我不是在寻找 va list 和其他宏 我正在寻找类似主函数参数的东西 众所周知 默认原型是 int main int argc char argv 现在 我
  • Asp.Net Core 区域路由到 Api 控制器不起作用

    我有一个托管在某个区域的 API 控制器 然而 路由似乎不起作用 因为我的 ajax 调用在尝试执行控制器操作时不断返回 404 控制器构造函数中的断点永远不会被命中 Area WorldBuilder Route api controll
  • 浏览器中默认选择的文本颜色 - 它是什么?

    假设没有 CSS javascript 或其他 HTML 技巧 浏览器如何确定所选文本的文本颜色和背景 例如 标准白色背景 FFFFFF or RGB 255 255 255 黑色文字 000000 or RGB 0 0 0 当选择反转颜色
  • IBM Worklight 5.0.6.x - 混合 Android 应用程序无法在真实设备上运行

    我已经使用 Android 环境创建了一个 Worklight 应用程序并尝试运行它 它在 Android 模拟器中工作正常 但当我尝试在 Android 设备中运行它时 它显示错误 不幸的是该应用程序已停止 有人可以帮助我解决这个问题吗
  • 使其Pythonic:创建一个sqlite3数据库(如果它不存在)?

    我编写了一个 Python 脚本 如果数据库不存在 它会初始化一个空数据库 import os if not os path exists Database os makedirs Database os system sqlite3 Da
  • 如何用纯 JavaScript 实现 jQuery Mobile 动画 Ajax 页面导航(转换)

    我一直在使用基于 CSS3 的动画来在单页应用程序中使用 javascript 来对页面进行动画处理 最近我在使用 jQuery mobile 默认情况下 对于所有链接 jQuery Mobile 使用 ajax 加载页面并为其设置动画 我
  • 在 JSP 中加载 img

    我正在尝试在 JSP 中动态加载图像 并且我正在尝试执行以下操作 img src 其中 book img 包含一个字符串 绝对路径 我该如何解决这个问题 我收到的错误如下 元素 img 上的属性 src 值错误 路径中的 DOUBLE WH
  • mathematica 可以做一些平面几何绘图吗

    我正在尝试使用计算机来显示一些平面几何图 我不知道什么软件可以做到这一点 也不知道mathematica是否可以轻松地生成这样的图 例如 我有以下情节要展示 给定任何三角形 ABC 设 AD 为平分角 BAC 并与 BC 相交于 D 的线
  • 列的类型为没有时区的时间戳,但表达式的类型为字符变化:Nifi

    我正在尝试使用 nifi 将 CSV 记录插入 Postgres 数据库 示例 csv 文件 timenow location 2019 10 21 15 13 11 colombo nifi场景运行时 出现以下错误 错误列 timenow
  • 在控制台应用程序中使用 WebBrowser

    我想用它来调用网页上的一些JS脚本 我有这个 static void Stuff WebBrowser browser new WebBrowser browser Navigate http www iana org domains ex
  • 将背景设置为空

    如果我在 xml 布局中使用以下行 android background null 安全吗 从性能的角度来看有效吗 或者 最好从以下位置设置布局或组件的背景 实际代码为空 android background null 绝对安全 如果你想根
  • 如何将 SourceGear DiffMerge 设置为 Visual Studio 的差异/合并工具?

    我使用 TFS 进行源代码控制 但我想使用 SourceGear DiffMerge 查看文件差异并进行合并 我找到了 工具 gt 选项 gt 源代码管理 gt Visual Studio Team Foundation Server gt
  • 如果应用程序未运行,为什么不显示平视通知

    我使用 fcm 实现了平视通知 当应用程序收到 fcm 通知时 如果我的应用程序正在运行 则平视通知会显示在屏幕上 那挺好的 但如果我的应用程序处于后台或被杀死 则不会显示平视通知 我怎么解决这个问题 也许我认为如果我的应用程序在收到 fc
  • 在 PHP 中获取恰好一周前的时间戳?

    我需要使用 PHP 计算 7 天前的时间戳 因此如果当前是 3 月 25 日晚上 7 30 它将返回 3 月 18 日晚上 7 30 的时间戳 我应该从当前时间戳中减去 604800 秒 还是有更好的方法 strtotime 1 week
  • 如何在鼠标悬停时显示隐藏的div?

    如何在鼠标悬停时显示一组隐藏的div 例如 div Div 1 Content div div Div 2 Content div div Div 3 Content div 所有 div 都需要在鼠标悬停事件上显示 如果 div 被隐藏
  • Python Pandas:使用 Aggregate 与 Apply 定义新列

    假设我有一个像这样的数据框 n 20 dim1 np random randint 1 3 size n dim2 np random randint 3 5 size n data1 np random randint 10 20 siz