pandas 相当于对多列使用 STRING_AGG 进行分组

2024-01-01

那么有没有一种方法可以对 DataFrame 对象进行分组,然后对于剩余的列,将所有条目放入一个集合(或具有过滤的唯一值的列表)中。所以像这样的事情

   Name        Date  Amount   purchase
0  Jack  2016-01-31      10    'apple'
1  Jack  2016-02-29       5        25
2  Jack  2016-02-29       8       'B+'
3  Jill  2016-01-31      10       'D2'
4  Jill  2016-02-29       5         E
4  Jill  2016-02-29       5         E

并按前两列分组后输出。

    Name        Date  Amount     purchase
 0  Jack  2016-01-31     [10]     [apple]
 1  Jack  2016-02-29    [5,8]   [25,'B+']
 3  Jill  2016-01-31     [10]      ['D2']
 4  Jill  2016-02-29      [5]       ['E']

所以我可以对每一列进行操作df_data = df.groupby(['Name', 'Date'])['Amount'].apply(set)然后将它们连接起来,但是如果列表很长,是否有更短更优雅的解决方案?


不要这样做

Pandas 从来没有被设计为以系列/列的形式保存列表。您可以设计昂贵的解决方法,但不建议使用这些方法。

不建议连续保存列表的主要原因是您会失去与使用连续内存块中保存的 NumPy 数组相关的矢量化功能。您的系列将是objectdtype,表示一系列指针,很像list.

当然,objectdtype 对于混合类型是不可避免的。但是,在这里,嵌套指针结构加剧了这种效果。您将失去内存和性能方面的优势,以及对优化的 Pandas 方法的访问权。


稍微好一点的替代方案

您可以聚合为字符串,这样您就只有一层指针:

res = df.groupby(['Name', 'Date'], as_index=False)[['Amount', 'purchase']]\
        .agg(lambda x: ', '.join(map(str, set(x))))

print(res)
    
   Name        Date Amount  purchase
0  Jack  2016-01-31     10   'apple'
1  Jack  2016-02-29   8, 5  'B+', 25
2  Jill  2016-01-31     10      'D2'
3  Jill  2016-02-29      5         E
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pandas 相当于对多列使用 STRING_AGG 进行分组 的相关文章

  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • 如何使用 QWebView 显示 html。 Python?

    如何在控制台中显示 HTML 格式的网页 import sys from PyQt4 QtGui import QApplication from PyQt4 QtCore import QUrl from PyQt4 QtWebKit i
  • matplotlib:在次要标签下绘制主要刻度标签

    这看起来应该很容易 但我不知道该怎么做 我有一个 X 轴上有时间的图 我想设置两组刻度 小刻度显示一天中的小时 大刻度显示日 月 所以我这样做 set date ticks to something sensible xax ax get
  • 每个刻度标签都有不同的颜色

    我正在尝试使用 matplotlib python 3 5 创建一个散点图 其中 x 轴上的每个刻度都有不同的颜色 这怎么可能 例如 假设 x 刻度为 Mo Tu We Th Fr Sa Su 现在我希望 Mo 是绿色的 Tu 是蓝色的 等
  • 如果使用 unicode 字符,则从数据库中进行 SELECT 会出现问题

    我在用着latest带DatabaseLibrary的python和机器人框架版本 https franz see github io Robotframework Database Library api 1 0 1 DatabaseLi
  • 从另一个文件覆盖函数中的变量

    一 总结 我不知道如何从另一个文件覆盖函数中的变量 2 示例 2 1 配置 I use logbook http logbook pocoo org and pyfancy https github com ilovecode1 Pyfan
  • 参数太少错误,同时未使用参数占位符

    我尝试使用 PYODBC 在 Access 数据库中执行 SQL 查询 但出现以下错误 pyodbc Error 07002 07002 Microsoft ODBC Microsoft Access 驱动程序 参数太少 预期为 1 301
  • 在我的 Mac 上以 root 身份运行 pip 时出现“权限被拒绝”

    我开始使用我的 Mac 来安装 Python 包 就像我在工作中使用 Windows PC 一样 然而在我的 Mac 上我经常遇到没有权限写入日志文件或站点包时出错 于是我想到了跑步pip install
  • 将 pandas 多索引数据帧转换为嵌套字典

    我有一个 pandas 多索引数据框 我试图将其输出为嵌套字典 create the dataset data clump thickness 0 0 274 0 0 1 19 0 1 0 67 0 1 1 12 0 2 0 83 0 2
  • 配置 Flask 以正确加载 Bootstrap js 和 css 文件

    如何使用 Flask 中的 url for 指令来正确设置 以便使用 Bootstrap 和 RGraph 的 html 页面可以正常工作 假设我的 html 页面看起来像这样 部分片段
  • 带有redirect_uri的social-auth-app-django Facebook后端状态

    我知道我的问题听起来像是重复的 但我到处寻找但没有找到任何解决方案 我正在努力为我的 django web 应用程序实现社交登录 到目前为止 谷歌 推特和雅虎登录均按预期工作 但facebook总是给出以下错误 URL 被阻止 此重定向失败
  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 在 grpc python 中处理异步流请求

    我试图了解如何使用双向流处理 grpc api 使用 Python API 假设我有以下简单的服务器定义 syntax proto3 package simple service TestService rpc Translate stre
  • django 南迁移,不设置默认值

    我使用 South 来迁移我的 Django 模型 然而 南方有一个令人讨厌的错误 它不会在 Postgres 数据库中设置默认值 例子 created at models DateTimeField default datetime no
  • 使用条件在 pandas 数据框中生成新列

    我有一个 pandas 数据框 如下所示 portion used 0 1 1 0 1 2 0 3 2 3 0 0 3 4 0 8 我想根据以下内容创建一个新专栏used列 以便df看起来像这样 portion used alert 0 1
  • (venv) (base) 都在 python 项目上活跃,我如何只进入 venv?

    所以我将 vscode 与 conda 对于 django 项目 一起使用 并尝试激活名为 venv 的虚拟环境 它来自 base C Users User Desktop pfa master pfa master venv Script
  • 将索引数组转换为 NumPy 中的 one-hot 编码数组

    给定一个一维索引数组 a array 1 0 3 我想将其一次性编码为二维数组 b array 0 1 0 0 1 0 0 0 0 0 0 1 创建归零数组b有足够的列 即a max 1 然后 对于每一行i 设置a i 第 列 至1 gt
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat
  • 如何测试send_file烧瓶

    我有一个小型烧瓶应用程序 它需要上传一些图像并将它们转换为多页 tiff 没什么特别的 但是如何测试多个文件的上传和文件下载呢 我的测试客户端 class RestTestCase unittest TestCase def setUp s

随机推荐

  • 如何从 Linux 获取窗口大小

    每个人 我对编程还是新手 我确实需要一些帮助来解决我面临的问题 所以 这里的情况是我试图在终端尺寸低于 80x24 时显示警告 根据记录 我的操作系统是 Window 但我使用虚拟机来运行 Linux 因为所有文件都在 Linux 中 当我
  • Kibana 不搜索嵌套字段

    使用 Elasticsearch Kibana 并尝试在嵌套对象中的字段中进行搜索 然而它似乎不起作用 这是我在模板中使用的映射 order 0 template ss7 signaling settings index mapping t
  • IE 10 相对位置元素在父元素中滚动后消失

    元素与位置 相对在特定情况下 位于大表格中的表格单元格内的 会在 Windows 7 上的 Internet Explorer 10 中消失 向下滚动页面 滚动div scroller向右 滚动到顶部 所有浏览器均按预期工作 IE10 显示
  • 如何在 Android 中捕获图像并将其显示在图库中?

    之前我捕捉到的图像出现在画廊中 但现在它们没有出现 我不明白为什么 这是我的代码 ContentValues values new ContentValues values put android provider MediaStore I
  • 在 JavaScript 中,如何在不修改原始对象的情况下修改嵌套对象的值?

    如何在不使用额外空间的情况下将所有嵌套对象值更改为 true 任何人都可以帮助我吗 我已经尝试过这种方式 但我没有得到处理嵌套对象的逻辑 P S 请不要关注字符串中的 true 或 false 因为它是模拟数据 我只想实现我未能做到的逻辑
  • 防止锁传播

    在 bash 下进行锁定的一种简单且看似可靠的方法是 exec 9 gt gt lockfile flock 9 然而 众所周知 bash 会将这样的 fd 锁传播到所有分叉的东西 包括执行的程序等 有什么办法告诉 bash 不要重复 fd
  • 如何将服务暴露到k8s集群之外?

    我已经使用以下命令运行了 Hello World 应用程序 kubectl run hello world replicas 2 labels run load balancer example image gcr io google sa
  • 重新安装 WAMP,未找到 WordPress 表,但在 PHPMYADMIN 中

    好吧 情况很奇怪 我希望我不仅仅是运气不好 我从 Windows 7 升级到 8 当我升级时 WAMP 无法工作 我不假思索地重新安装了 WAMP 并按照网上的说明让 WAMP 正常工作 现在 我的 WordPress 站点将我重定向到安装
  • 两次dispatchKeyEvent调用方法

    我在我的活动中实现了dispatchKeyEvent来监听按下的Enter键 问题是 当我单击 Enter 时 它会调用我的方法两次 我怎样才能解决这个问题 谢谢 祝你有美好的一天 Override public boolean dispa
  • 可扩展列表适配器的问题

    我是Android开发的新手 所以我希望有人能帮助我解决这个问题 我正在尝试创建一个可扩展的列表 我尝试过谷歌搜索 并阅读了谷歌文档 但不知怎的 我无法理解它 我的代码在 eclipse 中没有给出错误 但是当在模拟器中运行它时 它会在启动
  • 为什么 Eclipse Juno 4.2 运行“JPA Java Change Event Handler”进程?

    我刚刚升级到 Eclipse Juno 4 2 我有一个完全干净的新工作区 但导入了以前在 Eclipse 3 7 中使用过的项目 因此其中有一些 Eclipse 元数据 当迁移到 4 2 时 我将项目转换为使用 Project Facet
  • 反应本机弹出不适用于反应本机 0.60.0

    Is 反应本机弹出不再工作了吗 它是否完全从react native中删除了 我在用反应本机版本 0 60 0 我什至无法在反应本机帮助 请检查图像以获取更多参考 同样在这里 此时 对您的项目进行全新备份 然后复制 android 和 io
  • Python 执行速度:笔记本电脑与台式机

    我正在运行一个进行简单数据处理的程序 解析文本 填充字典 对结果数据计算一些函数 该程序仅使用CPU RAM和HDD 从 Windows 命令行运行 输入 输出到本地硬盘 屏幕上没有显示或打印任何内容 没有网络 相同的程序运行在 台式机 W
  • 通过 VSTS API 将一个分支合并到另一个分支

    有没有一种方法可以使用 API 将一个分支合并到另一个分支 我看了这里 但它似乎没有为我提供我想要的解决方案 推送单个文件很乏味 https www visualstudio com en us docs integrate api git
  • 如何增强 lpsolve R 优化解决方案以在 hadoop 集群上运行?

    我正在使用 R lpsolve 包来优化我的交通模型 我的代码运行良好 但由于我有大量节点和路径 因此需要花费大量时间才能运行 我计划在 hadoop 集群上运行我的代码 请指导我需要对代码进行的更改 我认为在 hadoop 集群上运行优化
  • 如何在vba中的字符串中添加双引号?

    我想通过 vba 在单元格中插入包含双引号的 if 语句 这是我的代码 Worksheets Sheet1 Range A1 Value IF Sheet1 B1 0 Sheet1 B1 由于双引号 我在插入字符串时遇到问题 如何处理双引号
  • Perl 无法在具有 32 GB RAM 的 Snow Leopard Mac 服务器上分配超过 1.1 GB 的空间

    我有一台具有 32GB RAM 的 Mac 服务器 雪豹 当我尝试在 Perl v 5 10 0 中分配超过 1 1GB RAM 时 出现内存不足错误 这是我使用的脚本 usr bin env perl My snow leopard MA
  • 学习 JavaScript 最好、最有效的书是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 pandas 数据帧生成 sas7bdat 文件

    我想知道是否有任何Python库支持这种转换 目前我找到的选项是SASpy csv或SQL数据库 但不成功 这实际上不是一个编程问题 但希望这不会成为问题 我找到了这个帖子 将 pandas 数据框导出为 SAS sas7bdat 格式 h
  • pandas 相当于对多列使用 STRING_AGG 进行分组

    那么有没有一种方法可以对 DataFrame 对象进行分组 然后对于剩余的列 将所有条目放入一个集合 或具有过滤的唯一值的列表 中 所以像这样的事情 Name Date Amount purchase 0 Jack 2016 01 31 1