首页 > 解决方案 > 计算 Pandas 中所有行的行子集的平均值

问题描述

我试图通过过滤掉不传递标志的行来计算列的统计信息,但返回所有行的整体统计信息。这个概念本质上是使用“估计宇宙”来计算统计数据。我的实际示例要复杂得多,因此我简化为一个基本示例:

import pandas as pd
import numpy as np

idx = range(0,20)
data = pd.Series(np.random.random_sample(20),index = idx)
flag = pd.Series(np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]),index = idx)

使用上面的数据,我想返回数据的平均值,但只计算 flag == 1 的行的平均值。我面临的挑战是返回所有行的平均值,即使是那些不用于计算的行它。

我可以做这样的事情:

data.groupby(flag).mean()

然后在所有行中重复 1 组的值,但这不起作用,因为我的示例使用额外的组层来计算统计信息。在我的真实示例中,我基本上是使用单独的分组计算每行的组均值和标准差,但我也希望仅使用传递标志的行来计算这些统计数据。

谢谢你的帮助!

编辑:

作为对第一条评论的回应,我希望输出如下所示:

import pandas as pd
import numpy as np

np.random.seed(100)

idx = range(0,20)
data = pd.Series(np.random.random_sample(20),index = idx)
flag = pd.Series(np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]),index = idx)

我正在寻找第 1 组的平均值:

data.groupby(flag).mean()

0    0.466647
1    0.442576
dtype: float64

然后让它对每一行重复:

pd.Series(data.groupby(flag).mean()[1],index = idx)

0     0.442576
1     0.442576
2     0.442576
3     0.442576
4     0.442576
5     0.442576
6     0.442576
7     0.442576
8     0.442576
9     0.442576
10    0.442576
11    0.442576
12    0.442576
13    0.442576
14    0.442576
15    0.442576
16    0.442576
17    0.442576
18    0.442576
19    0.442576
dtype: float64er code here

我只是在寻找一种更好的方法来做到这一点,因为最终这将扩展到跨许多数据集的多个统计数据,并将涉及额外的分组层。

希望这很清楚。谢谢!

标签: pythonpandasnumpy

解决方案


推荐阅读