GroupBy pandas DataFrame 并选择最常见的值

2023-11-26

我有一个包含三个字符串列的数据框。我知道第三列中唯一的一个值对于前两个值的每种组合都有效。为了清理数据,我必须按前两列对数据框进行分组,并为每个组合选择第三列的最常见值。

My code:

import pandas as pd
from scipy import stats

source = pd.DataFrame({
    'Country': ['USA', 'USA', 'Russia', 'USA'], 
    'City': ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
    'Short name': ['NY', 'New', 'Spb', 'NY']})

source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])

它说最后一行代码不起作用KeyError: 'Short name'如果我尝试仅按城市分组,则会出现断言错误。我能做什么来解决它?


熊猫 >= 0.16

pd.Series.mode可用!

Use groupby, GroupBy.agg,并应用pd.Series.mode每个组的功能:

source.groupby(['Country','City'])['Short name'].agg(pd.Series.mode)

Country  City            
Russia   Sankt-Petersburg    Spb
USA      New-York             NY
Name: Short name, dtype: object

如果需要将其作为 DataFrame,请使用

source.groupby(['Country','City'])['Short name'].agg(pd.Series.mode).to_frame()

                         Short name
Country City                       
Russia  Sankt-Petersburg        Spb
USA     New-York                 NY

有用的事情Series.mode是它总是返回一个系列,这使得它非常兼容agg and apply,尤其是在重建 groupby 输出时。它也更快。

# Accepted answer.
%timeit source.groupby(['Country','City']).agg(lambda x:x.value_counts().index[0])
# Proposed in this post.
%timeit source.groupby(['Country','City'])['Short name'].agg(pd.Series.mode)

5.56 ms ± 343 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
2.76 ms ± 387 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

处理多种模式

Series.mode当有时也做得很好multiple modes:

source2 = source.append(
    pd.Series({'Country': 'USA', 'City': 'New-York', 'Short name': 'New'}),
    ignore_index=True)

# Now `source2` has two modes for the 
# ("USA", "New-York") group, they are "NY" and "New".
source2

  Country              City Short name
0     USA          New-York         NY
1     USA          New-York        New
2  Russia  Sankt-Petersburg        Spb
3     USA          New-York         NY
4     USA          New-York        New
source2.groupby(['Country','City'])['Short name'].agg(pd.Series.mode)

Country  City            
Russia   Sankt-Petersburg          Spb
USA      New-York            [NY, New]
Name: Short name, dtype: object

或者,如果您想要每种模式单独一行,您可以使用GroupBy.apply:

source2.groupby(['Country','City'])['Short name'].apply(pd.Series.mode)

Country  City               
Russia   Sankt-Petersburg  0    Spb
USA      New-York          0     NY
                           1    New
Name: Short name, dtype: object

If you 不在乎只要它是其中之一,就会返回哪种模式,那么您将需要一个调用的 lambdamode并提取第一个结果。

source2.groupby(['Country','City'])['Short name'].agg(
    lambda x: pd.Series.mode(x)[0])

Country  City            
Russia   Sankt-Petersburg    Spb
USA      New-York             NY
Name: Short name, dtype: object

考虑(不)考虑的替代方案

您还可以使用statistics.mode来自 python,但是...

source.groupby(['Country','City'])['Short name'].apply(statistics.mode)

Country  City            
Russia   Sankt-Petersburg    Spb
USA      New-York             NY
Name: Short name, dtype: object

...当必须处理多种模式时,它不能很好地工作; AStatisticsError被提出。文档中提到了这一点:

如果数据为空,或者不存在最常见的值, 引发统计错误。

但你可以亲自看看...

statistics.mode([1, 2])
# ---------------------------------------------------------------------------
# StatisticsError                           Traceback (most recent call last)
# ...
# StatisticsError: no unique mode; found 2 equally common values
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GroupBy pandas DataFrame 并选择最常见的值 的相关文章

  • Django 视图集没有属性“get_extra_actions”

    我第一次使用 Django 我正在尝试构建一个 API 我正在遵循一些教程和示例 它工作正常 但在安装所有要求和项目后 我现在正在 Raspberry Pi 中运行该项目失败并出现以下错误 Performing system checks
  • 将 Python 字典中的键替换为唯一值

    a 0 PtpMotion 1 PtpMotion 2 LinMotion 3 LinMotion 4 LinMotion 5 LinMotion 6 LinMotion 7 LinMotion 8 LinMotion 9 PtpMotio
  • 代码终止后保持 matplotlib / pyplot 窗口打开

    我希望 python 绘制一个图 在不阻塞控制流的情况下显示它 并在代码退出后使图保持打开状态 这可能吗 这个以及相关的主题存在于许多其他线程中 见下文 但我无法让情节保持开放且非阻塞 例如 如果我使用pyplot ion before p
  • 将 Python 列表(JSON 或其他)插入 MySQL 数据库

    所以我在Python中有一堆数组数据 嗯 相反 我有一个清单 我试图将此数组存储到 MySQL 数据库中的单个单元格中 我尝试使用 JSON 来序列化我的数据 但也许我不明白 JSON 是如何工作的 因此 在连接到我的数据库后 我尝试了上游
  • 获取每行最后 150 行中所有正值的计数 - pandas

    我有以下数据集 其中有列Date and Values对于每一行 它两者都有 ve and ve价值观 我必须计算最后 150 行的所有正值 在每一行 因此前 150 行将具有空值 然后 以下行将具有最后 150 行的计数 ve行 类似地
  • 使用 python3 查找表情符号的宽度

    我尝试使用 python 中的模式打印字母 A def printA length height symbol a for i in range length for i in range height for i in range hei
  • 初始化整数变量以进行比较

    我正在学习麻省理工学院的开放课件课程计算机科学和 Python 编程简介 https ocw mit edu courses electrical engineering and computer science 6 0001 introd
  • 如何通过不规则索引获取子张量?

    我想通过不规则索引获得子张量 这是我的问题 Input tensor 2x8x10x1 Batch x Height x Width x Channel index Height 0 1 4 5 index Width 0 1 4 5 8
  • setUp() 中的 if 条件忽略测试

    在unittest python库中 存在函数setUp and tearDown用于设置变量和其他测试前后的事情 如何运行或忽略 setUp 中条件的测试 您可以致电if cond self skipTest reason in setU
  • 如何在Python Selenium中获取WebElement的类名?

    我使用 Selenium WebDriver 来抓取从网页中获取的 用 JavaScript 编写的表格 我正在迭代表行列表 每行可能属于不同的类别 我想获取此类的名称 以便我可以为每一行选择适当的操作 table body table f
  • 获取SVG绘图的边界框

    我想提取 SVG 绘图的边界框 由于 Python 已经在系统上可用并且还用于执行其他任务 因此我不想使用 JavaScript 或任何其他语言 我的理解是是否可以计算单个元素的边界框 但我不知道如何计算 整个绘图的边界框只是所有元素的最小
  • Django 自定义文件存储系统

    我有一个自定义存储 import os from django core files storage import Storage class AlwaysOverwriteFileSystemStorage Storage def get
  • max()、分组依据和排序依据

    我有以下 SQL 语句 SELECT t client id max t points AS max FROM sessions GROUP BY t client id 它只是列出了客户 ID 以及他们所获得的最大积分 现在我想按 max
  • 使用缓存时计算“页面浏览量”或“点击量”

    我有一个叫做show board 在其中 除其他外 我增加了一个字段Board views每次运行时加 1 以计算页面浏览量 问题是当我在该视图上使用 cache page 装饰器时 Board views仅在每次生成新的缓存视图时才会增加
  • 将连续行与相同的列值合并

    我有一个看起来像这样的东西 我该如何处理 0 d 0 The DT 1 Skoll ORGANIZATION 2 Foundation ORGANIZATION 3 4 based VBN 5 in IN 6 Silicon LOCATIO
  • Django Admin Media 前缀 URL 问题

    我有以下文件夹结构 src BAT templates admin base html src BAT media base css src BAT media admin media base css 设置 py MEDIA ROOT o
  • 在Python中设置Windows命令行终端标题

    我在 Windows 计算机上运行某个 Python 脚本的多个实例 每个实例都来自不同的目录并使用单独的 shell 窗口 不幸的是 Windows 为每个 shell 窗口提供了相同的名称
  • 对象对于所需数组来说太深 - scipy.integrate.odeint

    我昨天刚开始使用Python 使用时遇到错误scipy integrate odeint 我定义了一个函数 def SIR x t beta gamma mu M 这需要numpy array物体x t and M 标量浮动beta gam
  • 子进程调用,它们是并行完成的吗?

    我一直在谷歌搜索这个问题的答案 但似乎没有一个答案 谁能告诉我如果subprocess模块是否并行调用 Python 文档建议它可用于生成新进程 但没有提及它们是否并行 如果它们可以并行完成 您能否给我举一个例子或将我链接到一个例子 这取决
  • 评估 df 每行中的日期时间函数是否落在另一个 df 中的日期时间范围内

    我是 python 新手 需要一些帮助来解决有关日期时间函数的问题 I have df a其中有一列标题为time 我正在尝试创建一个新专栏id在这个df a 我想要id根据时间是否包含在某个时间范围内来确定的列df b date 和 da

随机推荐

  • JavaScript 颜色渐变

    使用带或不带 Jquery 的 javascript 我需要根据开始和结束颜色创建颜色渐变 这可以通过编程来完成吗 结束颜色只会是开始颜色的较暗阴影 并且它用于无序列表 我无法控制 li 项目的数量 我正在寻找一种解决方案 允许我选择开始和
  • C# 事件处理程序

    如何在 C 中检查 Button Click 事件是否有关联的处理程序 If button Click null 抛出编译错误 你不能 事件只是公开 添加处理程序 和 删除处理程序 仅此而已 事实上 在 CLR 中 您还可以使用元数据将方法
  • 如何使用 google API for python 在特定文件夹下创建工作表?

    我可以在 我的云端硬盘 的根目录中使用以下代码创建一个工作表 但是如何在 我的云端硬盘 或 共享云端硬盘 的文件夹下创建该工作表 from googleapiclient discovery import build service bui
  • 如何在代码中设置绑定?

    我需要在代码中设置绑定 我似乎无法弄清楚 这是我尝试过的 XAML
  • wpf 中的弹出窗口和切换按钮交互

    我有一个包含切换按钮和弹出窗口的控件 单击 ToggleButton 时 会出现弹出窗口 当 ToggleButton 未选中时 弹出窗口应关闭 此外 单击远离弹出窗口应导致其关闭 并导致切换按钮取消选中 我通过将 Popup 的 Stay
  • 如何在 CKeditor 上传中向 POST 值添加字段

    I use django and ckeditor为 TextEdits 提供所见即所得的品味 我想使用CKEditor文件上传功能 在文件浏览器 图像对话框中 但是CKEditor上传图像的POST只包含文件数据 这是 CSRF 检查的一
  • 从 Linq 查询调用方法

    我正在使用 Linq 查询和调用方法 Like oPwd objDecryptor DecryptIt c Password ToString 它将返回空值 意味着这不会起作用 我如何解决这个问题 Thanks var q from s i
  • 过滤以特定关键字开头的字符串列表

    我怎样才能找到一个字符串 PartialWord 在列表 WordList 在 Python 2 7 中 PartialWord ab WordList absail rehab dolphin 使用通配符进行搜索 例如 ab 如果它以这些
  • Android TextView 对齐文本

    如何获取 a 的文本TextView是否合理 文本在左侧和右侧齐平 我找到了一个可能的解决方案here 但它不起作用 即使您将vertical center更改为center vertical等 我不相信 Android 支持完全合理 更新
  • MS Access 错误“ODBC——调用失败。转换规范的字符值无效 (#0)”

    有谁知道这个错误意味着什么或如何解决它 我使用的是 Access 2003 和 SQL2005 当尝试在特定子表单上添加记录时会出现它 Microsoft SQL Native Client 转换规范的字符值无效 0 此 MS 错误报告描述
  • 从另一个应用程序以编程方式打开 iOS 设置应用程序中的键盘设置屏幕

    我们如何以编程方式直接进入 iOS 设置应用程序的以下任何屏幕 UPDATE 正如其他用户指出的那样 此解决方案不再适用于 iOS10 如果有人知道如何使其在 iOS10 中运行 请告诉我们 iOS 要打开 您自己的应用程序的 设置 您可以
  • 运行 mocha 测试时 Babel 意外导入令牌

    其他相关问题中提供的解决方案 例如在 babelrc 中包含适当的预设 es2015 已在我的项目中实现 我有两个项目 我们称它们为 A 和 B 它们都使用 ES6 模块语法 在项目 A 中 我导入项目 B 该项目通过 npm 安装并位于
  • SQLite 与使用数字的表名有关的问题?

    我正在开发一个应用程序 它要求用户选择这样格式的年份1992 1993来自旋转器 表名也被命名为1992 1993这个想法是使用 SQL 通过这样的语句提取该表中的值选择 1992 1993 但是 当我运行模拟器时 它会抛出错误 如果我随后
  • 使用 Zend Framework 和 PHP 发送电子邮件

    我正在制作一个表单 当用户输入他们的电子邮件帐户并单击发送时 一封电子邮件将发送到他们的电子邮件帐户 我已经把一切都解决了 只是它不会将电子邮件发送到我的帐户 有人有主意吗 是否有我遗漏的配置或其他什么 这是我的控制器的示例 public
  • 覆盖 json.Marshal 使用的布局来格式化 time.Time

    在Golang中 有没有办法使通用encoding jsonMarshal 在编组时使用不同的布局time Time fields 基本上我有这个结构 s starttime time Now name ali 我想使用编码为 jsonen
  • 如何从 Windows 窗体连接到 MySQL?

    如何从 Windows 窗体连接到 MySQL 数据库 这里有大量连接字符串示例 http www connectionstrings com
  • GetProperties() 返回接口继承层次结构的所有属性

    假设以下假设的继承层次结构 public interface IA int ID get set public interface IB IA string Name get set 使用反射并进行以下调用 typeof IB GetPro
  • 如何将资源嵌入到 .NET PE 可执行文件中?

    如何在 Visual Studio 2010 的 NET PE 可移植可执行文件 中包含资源 In the 旧时光我们将创建一个资源脚本文件 wumpa rc jqueryjs RCDATA jquery js SplashLogo PNG
  • 主脑极小极大算法

    我正在尝试在 python 中实现 Donald Knuth 的密码破解算法 只需不超过 5 步 我已经多次检查了我的代码 它似乎遵循算法 如下所示 http en wikipedia org wiki Mastermind board g
  • GroupBy pandas DataFrame 并选择最常见的值

    我有一个包含三个字符串列的数据框 我知道第三列中唯一的一个值对于前两个值的每种组合都有效 为了清理数据 我必须按前两列对数据框进行分组 并为每个组合选择第三列的最常见值 My code import pandas as pd from sc