这是我的数据框的假设示例,
>>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 的输出来创建一个新行,然后创建一个使用 的函数>groupby
和 mean
符合我想要的条件;然而,我的技能还不足以理解代码的大致样子。在我的新手看来,这似乎不是最简单的方法。
抱歉给您带来麻烦,提前谢谢您,
最佳答案
就您而言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/