Pandas:使用groupby计算平均值并且不忽略nan


当使用pandas groupby()函数按一列进行分组并计算另一列的平均值时,pandas会默认忽略NaN值。

如果您想在列中存在NaN值时显示NaN ,则可以使用以下基本语法:

 df. groupby (' team '). agg ({' points ': lambda x: x. mean (skipna= False )})

此特定示例将按团队列对 DataFrame 的行进行分组,然后计算列的平均值,而不忽略NaN值。

以下示例展示了如何在实践中使用此语法。

示例:使用 pandas groupby() 并且不要忽略 NaN

假设我们有以下 pandas DataFrame,其中包含有关各种篮球运动员的信息:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
                   ' points ': [15, np.nan, 24, 25, 20, 35, 34, 19, 14, 12]})

#view DataFrame
print (df)

  team points
0 to 15.0
1 A NaN
2 A 24.0
3 A 25.0
4 A 20.0
5 B 35.0
6 B 34.0
7B 19.0
8B 14.0
9B 12.0

假设我们使用以下语法来计算平均分值,按团队分组:

 #calculate mean of points, grouped by team
df. groupby (' team ')[' points ']. mean ()

team
At 21.0
B 22.8
Name: points, dtype: float64

请注意,即使 A 队的得分列中存在NaN值,也会返回每个团队的平均得分值。

默认情况下,pandas 在计算平均值时会忽略NaN值。

如果确实存在NaN ,您希望将NaN显示为平均值,则可以使用以下语法:

 #calculate mean points value grouped by team and don't ignore NaNs
df. groupby (' team '). agg ({' points ': lambda x: x. mean (skipna= False )})

      points
team	
To NaN
B 22.8

请注意,这次返回NaN值作为 A 队的平均分值。

通过使用skipna=False参数,我们告诉pandas在计算平均值时不要忽略NaN值。

其他资源

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

如何使用 Pandas GroupBy 计算唯一值
如何将函数应用于 Pandas Groupby
如何从 Pandas GroupBy 创建条形图

添加评论

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