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 创建条形图