python - Pandas groupby mean() 不忽略 NaN

标签 python pandas dataframe nan

如果我计算一个 groupby 对象的平均值,并且在其中一个组中有一个 NaN(s),则 NaN 将被忽略。即使在应用 np.mean 时,它仍然只返回所有有效数字的平均值。我希望只要有一个 NaN 在组内,就会出现返回 NaN 的行为。这里有一个简化的行为示例

import pandas as pd
import numpy as np
c = pd.DataFrame({'a':[1,np.nan,2,3],'b':[1,2,1,2]})
c.groupby('b').mean()
     a
b     
1  1.5
2  3.0
c.groupby('b').agg(np.mean)
     a
b     
1  1.5
2  3.0

我想收到以下结果:

     a
b     
1  1.5
2  NaN

我知道我可以事先替换 NaN,并且我可能可以编写自己的聚合函数,以便在 NaN 位于组内时立即返回 NaN。但是这个功能不会被优化。

您是否知道使用优化函数实现所需行为的论点?

顺便说一句,我认为所需的行为是在以前版本的 pandas 中实现的。

最佳答案

默认情况下,pandas 会跳过 Nan 值。您可以通过指定 skipna=False 使其包含 Nan:

In [215]: c.groupby('b').agg({'a': lambda x: x.mean(skipna=False)})
Out[215]: 
     a
b     
1  1.5
2  NaN

关于python - Pandas groupby mean() 不忽略 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106112/

相关文章:

r - 查找列中值之间具有给定差异的行

python - 将列添加到数据透视表( Pandas )

python - 合并很多数据帧在一起,没有循环,也没有使用 concat

python - 在 python 中从 JSON 创建可逆的 YAML

python - Pandas 给定日期的季度天数

python - 使用 .map() 在 pandas DataFrame 中高效地创建额外的列

python - 有没有一种简单的方法可以消除 Python-pandas 中 DataFrame 中的重复行?

python - 为什么我通过shell可以连接MySQL,但通过Python却无法连接?

python - 如何使用python将DataFrame中的列插入到具有可变列数的数据库表的新列中

python - 在Python中读取.tsv文件时忽略字符串