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

如何高效地找到 Pandas DataFrame 组中最常见的值?

Linda Hamilton
发布: 2024-11-29 11:32:15
原创
248 人浏览过

How to Efficiently Find the Most Common Value in a Pandas DataFrame Group?

按 pandas DataFrame 分组并选择最常见的值

问题


假设您有一个包含多个字符串列的数据框。前两列的每种组合在第三列中只能有一个有效值。您需要通过按前两列对数据框进行分组并为每个组合选择第三列的最常见值来一致地清理数据。

以下代码演示了尝试实现此目的:


import pandas as pd<br>from scipy import stats</p>
<p>source = pd.DataFrame({</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'Country': ['USA', 'USA', 'Russia', 'USA'], 
'City': ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
'Short name': ['NY', 'New', 'Spb', 'NY']})
登录后复制

source.groupby(['国家','城市']).agg(lambda x: stats.mode(x['简称'])[0])

但是,最后一行代码失败并出现 KeyError。如何解决此问题?

解决方案


Pandas >= 0.16< /h4>

对于 Pandas 版本 0.16 及更高版本,请使用以下代码:


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

此代码使用 Pandas 0.16 中引入的 pd.Series.mode 函数来查找最常见的值

处理多种模式的替代方案


Series.mode 函数可以有效地处理具有多种模式的情况:


  • 如果有多种模式,则返回系列包含所有模式。

  • 如果您需要为每种模式单独设置一行,请使用 GroupBy.apply(pd.Series.mode)。 /li>
  • 如果您需要任何一种模式,请使用 GroupBy.agg(lambda x: pd.Series.mode(x)[0]).

要考虑的替代方案


虽然您可以使用 Python 中的 stats.mode,但它不能很好地处理多种模式,并且可能会引发统计错误。所以不推荐。

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

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