Python/Pandas - 当只有一个值需要计算时,有没有一种方法可以使mean()返回NaN?

标签 python pandas

这是我的数据框的假设示例,

>>df
    1A   1B   1C   2A   2B   2C   3A    3B    3C   
P1  11   13   15   11   9.7  12   12.3  22.6  22.4 
P2  11   0    15   0    0    12   0     0     0    
P3  NaN  25   12   NaN  NaN  12   NaN   NaN   NaN  
P4  11   NaN  12   9    NaN  NaN  NaN   NaN   NaN  
P5  11   NaN  NaN  NaN  12   NaN  NaN   NaN   12.3

我目前正在使用每行中的每三列进行平均

df_avg = df.groupby(np.arange(len(df.columns))//3, axis=1).mean()

这将为我提供结果数据框,

    0       1       2
P1  13.0    10.9    19.1
P2  8.7     4.0     0.0
P3  18.5    12.0    NaN
P4  11.5    9.0     NaN
P5  11.0    12.0    12.3

当只有 2 个值和 1 个 NaN 时,mean() 似乎除以二,这正是我想要的。
另外,那些有 3 个 NaN 的返回 NaN,这也很好。

但是,P5 的最后一个值为 12.3,这是因为只有两个 NaN 和 12.3 作为唯一值(其他情况相同)。
这不是平均值,我希望删除任何具有 2 个 NaN 的站点或使其返回 NaN。

保存此内容的最佳方法是什么
“对每组 3 个单元格进行平均”+“将具有 2 个值和一个 NaN 的组除以 2”+“具有三个 NaN 的组应返回 NaN”
并且让它也做“只有一个实值和两个NaN返回NaN的组”?

我能想到的一种方法是使用 np.arange(len(df.columns))//3 的输出来创建一个新行,然后创建一个使用 的函数>groupbymean 符合我想要的条件;然而,我的技能还不足以理解代码的大致样子。在我的新手看来,这似乎不是最简单的方法。

抱歉给您带来麻烦,提前谢谢您,

最佳答案

就您而言min_count

g=df.groupby(np.arange(len(df.columns))//3, axis=1)
g.sum(min_count=2)/g.count()
Out[213]: 
            0     1     2
P1  13.000000  10.9  19.1
P2   8.666667   4.0   0.0
P3  18.500000   NaN   NaN
P4  11.500000   NaN   NaN
P5        NaN   NaN   NaN

关于Python/Pandas - 当只有一个值需要计算时,有没有一种方法可以使mean()返回NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59058381/

相关文章:

Python - 如何根据 DF 和其中的数据制作 SQL "Create Table"语句?

python - 在 Pandas 中递归创建和分配数据帧

python - Selenium 发现隐藏元素

python - 使用 Matplotlib 格式化绘图

python - Pandas - 使用算术将新行添加到数据框

python - Scrapy:在每条记录中重复 Response.URL

python - 根据同一数据帧的行中的值在数据帧中创建新列

python - 在 groupby 聚合之后指定列顺序

python - 应用凸函数的计算成本何时?

python - 将文件中的字符串转换为整数以在新代码中使用