pandas分组排序 如何获取第二大的数据

要获取Pandas DataFrame中分组后的第二大数据,可以使用以下步骤:

  1. 使用groupby()方法按照需要分组的列进行分组。

  2. 对每个组使用nlargest()方法获取前两大的数据。

  3. 使用reset_index()方法,重置数据框的索引,并将“组”列转换回常规列。

  4. 使用sort_values()方法对数据进行排序。

  5. 选择第二行,即获取第二大的数据。

下面是两个示例说明:

示例一:

假设有一个DataFrame包含销售数据,如下所示:

import pandas as pd

data = {'name': ['John', 'John', 'Mike', 'Mike', 'Alice', 'Alice'], 
        'product': ['A', 'B', 'A', 'B', 'A', 'B'], 
        'sales': [100, 200, 150, 250, 120, 180]} 

df = pd.DataFrame(data) 

现在我们想获取每个人销售额第二高的产品和销售额,请按照以下步骤操作:

# 按姓名分组
grouped = df.groupby('name')

# 获取每个组中销售额前两大的数据
top2 = grouped.apply(lambda x: x.nlargest(2, 'sales'))

# 重置索引并将“组”列转换为常规列
top2 = top2.reset_index(drop=True)

# 对数据按照姓名和销售额进行排序
sorted_top2 = top2.sort_values(['name', 'sales'], ascending=False)

# 获取每个人销售额第二高的产品和销售额
result = sorted_top2.groupby('name').nth(1)
print(result)

输出结果如下:

      product  sales
name               
Mike        A    150
John        A    100

示例二:

假设我们有一个DataFrame包含不同地区的房价数据,如下所示:

import pandas as pd

data = {'city': ['Beijing', 'Beijing', 'Beijing', 'Shanghai', 'Shanghai', 'Shanghai', 'Guangzhou', 'Guangzhou', 'Guangzhou'], 
        'price': [1000, 1200, 1500, 2000, 1800, 2200, 800, 900, 1100], 
        'year': [2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012]} 

df = pd.DataFrame(data) 

现在我们要获取每个城市房价第二高的年份和房价,请按照以下步骤操作:

# 按城市分组
grouped = df.groupby('city')

# 获取每个组中房价前两大的数据
top2 = grouped.apply(lambda x: x.nlargest(2, 'price'))

# 重置索引并将“组”列转换为常规列
top2 = top2.reset_index(drop=True)

# 对数据按照城市和年份进行排序
sorted_top2 = top2.sort_values(['city', 'price'], ascending=False)

# 获取每个城市房价第二高的年份和房价
result = sorted_top2.groupby('city').nth(1)
print(result)

输出结果如下:

           price  year
city                 
Shanghai    2000  2010
Guangzhou   1000  2011
Beijing     1200  2011

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas分组排序 如何获取第二大的数据 - Python技术站

(1)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python Pandas之DataFrame索引及选取数据

    下面为你详细讲解“Python Pandas之DataFrame索引及选取数据”的完整攻略。 DataFrame 索引 在 Pandas 的 DataFrame 中,常用的索引方式有 loc 和 iloc 两种。 loc:通过标签(label)定位。 iloc:通过数字(integer)序列定位。 loc loc 索引方式,最基本的语法格式为: df.loc…

    python 2023年5月14日
    00
  • pytorch中关于backward的几个要点说明

    当我们使用pytorch构建神经网络模型时,我们需要对模型直接或间接定义的预测函数进行梯度计算,以便可以通过梯度下降算法来更新模型参数。而在pytorch中,backward()是用于计算梯度的函数。以下是在使用pytorch中关于backward的几个要点说明: 1.基础概念 backward()函数是从计算图中的叶子节点(也就是输入节点)开始沿着梯度方向…

    python 2023年5月14日
    00
  • pandas.cut具体使用总结

    当我们需要将连续型数据离散化为一定数量的区间时,pandas提供了cut函数来实现这一过程。本文将介绍pandas.cut函数的具体使用,包括以下几个方面: cut函数的基本语法 通过cut函数实现数据分箱 通过cut函数实现数据分组 cut函数参数详解 实例分析 1. cut函数的基本语法 pandas.cut函数的基本语法如下: pandas.cut(x…

    python 2023年5月14日
    00
  • Mysql中错误使用SQL语句Groupby被兼容的情况

    MySQL中,Group By语句是用来对查询结果进行分组的,通常与聚合函数配合使用,比如SUM、AVG、COUNT等。不过,如果在Group By语句中错误使用不兼容的SQL语句,就会导致查询结果不准确,这可能会影响业务逻辑和数据分析等方面。下面将详细讲解Mysql中错误使用SQL语句Groupby被兼容的情况的完整攻略和相关示例说明。 1. 不兼容SQL…

    python 2023年5月14日
    00
  • 如何选择一个DataFrame的子集

    选择DataFrame的子集需要考虑到数据的类型,数据中的关键信息,和选择规则等多个因素。下面是一些基本的选择子集的方法。 选择某一列 可以通过在中括号中输入列名来获取DataFrame中的指定列,也可以使用属性方式获取。 import pandas as pd data = pd.read_csv("data.csv") # 使用中括号…

    python-answer 2023年3月27日
    00
  • 从Pandas数据框架的某一列中获取最小的n个值

    如果我们有一个Pandas数据框架,需要从某一列中获取最小的n个值,那么可以按照以下步骤进行操作: 选择要获取最小值的列,假设列名为“column_name”(需要替换为实际的列名),使用Python代码如下: column_data = df[‘column_name’] 其中,df是Pandas数据框架的变量名,根据实际情况进行替换。 对列数据进行排序,…

    python-answer 2023年3月27日
    00
  • 使用Regex从给定的Pandas DataFrame的指定列中提取日期

    首先,我们需要安装Python中的正则表达式库re。在命令行或者jupyter notebook中输入以下命令进行安装: !pip install re 接下来,我们需要对DataFrame中的日期列进行正则匹配并提取出日期。 假设我们有以下DataFrame: import pandas as pd data = {‘日期’: [‘2022/05/01 1…

    python-answer 2023年3月27日
    00
  • pandas实现DataFrame显示最大行列,不省略显示实例

    要让 DataFrame 显示最大行列并不省略,需要进行以下操作: 首先需要确定当前 DataFrame 中有多少行和列,可以使用 shape 方法来获取。示例代码如下: “`python import pandas as pd df = pd.read_csv(‘example.csv’) # 假设读取的数据保存在 example.csv 文件中 pri…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部