首页 > 后端开发 > Python教程 > 如何找到 Pandas DataFrame 每组中最常见的值?

如何找到 Pandas DataFrame 每组中最常见的值?

Linda Hamilton
发布: 2024-12-01 08:22:10
原创
163 人浏览过

How to Find the Most Frequent Value in Each Group of a Pandas DataFrame?

为 DataFrame 中的每个组选择最常见的值

要清理包含多个字符串列的数据,需要按某些列对行进行分组并选择最常见的值每个组中特定列的通用值。本文演示了如何使用强大的 Pandas 库完成此任务。

特定错误消息的代码更正

初始查询中提供的代码包含一些错误,已在下面更正:

import pandas as pd

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

# Group by 'Country' and 'City' and calculate the most frequent 'Short Name' in each group
result = source.groupby(['Country', 'City'])['Short Name'].apply(lambda x: pd.Series.mode(x)[0][0])
登录后复制

说明

  1. 使用最新的Series.mode: 原始代码尝试将statistics.mode应用于每个组,这不能很好地处理多种模式,并且可能会引发错误。相反,使用更新的 pd.Series.mode 函数,它显式返回所有模式的 Series,解决了问题。
  2. 处理多个模式: 确保只有一个选择最常见的值后,代码会从 Series.mode 返回的 Series 中提取第一个元素。这是通过使用 0 语法来实现的。

其他选项

如果首选 DataFrame 作为结果:

result = source.groupby(['Country', 'City'])['Short Name'].agg(pd.Series.mode).to_frame()
登录后复制

如果您想为每个单独的行mode:

result = source.groupby(['Country', 'City'])['Short Name'].apply(pd.Series.mode)
登录后复制

注意:如果您愿意接受任何模式值作为选择,您可以使用 lambda 函数从系列中提取第一个模式:

result = source.groupby(['Country', 'City'])['Short Name'].agg(lambda x: pd.Series.mode(x)[0])
登录后复制

以上是如何找到 Pandas DataFrame 每组中最常见的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板