Pandas:如何将 groupby 与 nlargest() 一起使用


您可以使用以下语法在 pandas DataFrame 中按组显示 n 个最大值:

 #display two largest values by group
df. groupby (' group_var ')[' values_var ']. nlargest ( 2 )

您可以使用以下语法对 pandas DataFrame 中每组的 n 个最大值执行某些操作(例如求和):

 #find sum of two largest values by group
df. groupby (' group_var ')[' values_var ']. apply ( lambda grp: grp.nlargest ( 2 ) .sum ())

以下示例展示了如何在实践中使用以下 pandas DataFrame 的每种方法:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   ' points ': [12, 29, 34, 14, 10, 11, 7, 36, 34, 22]})

#view DataFrame
print (df)

  team points
0 to 12
1 to 29
2 to 34
3 to 14
4 to 10
5 B 11
6 B 7
7 B 36
8 B 34
9 B 22

示例1:按组显示N个最大值

以下语法可用于显示按球队分组的两个最大分值

 #display two largest points values grouped by team
df. groupby (' team ')[' points ']. nlargest ( 2 )

team   
At 2 34
      1 29
B 7 36
      8 34
Name: points, dtype: int64

结果显示每个团队的两个最大分值,以及它们在原始 DataFrame 中的索引位置。

例2:对每组的N个最大值进行运算

我们可以使用以下语法来计算按球队分组的两个最大分值的总和:

 #calculate sum of two largest points values for each team
df. groupby (' team ')[' points ']. apply ( lambda grp: grp.nlargest ( 2 ) .sum ())

team
At 63
B70
Name: points, dtype: int64

以下是如何解释结果:

  • A队两个最大分值之和为63
  • B队两个最大分值之和为70

我们可以使用类似的语法来计算按球队分组的两个最大分值的平均值:

 #calculate mean of two largest points values for each team
df. groupby (' team ')[' points ']. apply ( lambda grp: grp.nlargest ( 2 ) .mean ())

team
At 31.5
B 35.0
Name: points, dtype: float64

以下是如何解释结果:

  • A队两次最高分值的平均值为31.5
  • B队两次最高分值的平均值为35.0

注意:您可以在此处找到GroupBy函数的完整文档。

其他资源

以下教程解释了如何在 pandas 中执行其他常见操作:

Pandas:如何计算每组的累计和
Pandas:如何按组计算唯一值
Pandas:如何按组计算众数
Pandas:如何按组计算相关性

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注