当前位置: 首页 > 面试题库 >

对Pandas DataFrame进行分组,计算一列的均值和标准差,并使用reset_index将std添加为新列

颜镜
2023-03-14
问题内容

我有一个Pandas DataFrame,如下所示:

   a      b      c      d
0  Apple  3      5      7
1  Banana 4      4      8
2  Cherry 7      1      3
3  Apple  3      4      7

我想按“ a”列对行进行分组,同时将“ c”列中的值替换为分组行中的平均值,并添加另一列,其中“
c”列中的值的std偏差已计算出平均值。对于分组的所有行,列“ b”或“ d”中的值是恒定的。因此,所需的输出将是:

   a      b      c      d      e
0  Apple  3      4.5    7      0.707107
1  Banana 4      4      8      0
2  Cherry 7      1      3      0

实现此目标的最佳方法是什么?


问题答案:

您可以使用以下groupby-agg操作:

In [38]: result = df.groupby(['a'], as_index=False).agg(
                      {'c':['mean','std'],'b':'first', 'd':'first'})

然后重命名各列并对其重新排序:

In [39]: result.columns = ['a','c','e','b','d']

In [40]: result.reindex(columns=sorted(result.columns))
Out[40]: 
        a  b    c  d         e
0   Apple  3  4.5  7  0.707107
1  Banana  4  4.0  8       NaN
2  Cherry  7  1.0  3       NaN

熊猫默认情况下会计算样本std。要计算总体标准:

def pop_std(x):
    return x.std(ddof=0)

result = df.groupby(['a'], as_index=False).agg({'c':['mean',pop_std],'b':'first', 'd':'first'})

result.columns = ['a','c','e','b','d']
result.reindex(columns=sorted(result.columns))

产量

        a  b    c  d    e
0   Apple  3  4.5  7  0.5
1  Banana  4  4.0  8  0.0
2  Cherry  7  1.0  3  0.0


 类似资料:
  • 我的数据与此类似: 我需要计算基于名称组的差异列的标准偏差。 我试过了 和 但两者都为传递给的变量提供了KeyError。我试图用以下方法解决它: 但错误仍然存在。 提前谢谢。

  • 计算一组动态列的Mean和STD子集。 举个例子: 上述测试数据如下表所示。我需要的是根据“Nmon”列中的值对每一行应用函数。 例如,第一条记录的Nmon值为7。然后我需要计算从7月到1月所有值的均值和均方差(均值=0.71,std=0.49)。 在Nmon值为4的第二个记录的情况下,平均值和标准偏差应仅针对从10月到1月的月份进行计算(平均值= 4,标准差= 0) 这里的月数会增加或减少,但第

  • 示例数据: 我想计算每个唯一列名称的平均值和标准偏差(忽略NA)以获得如下输出: 可再现数据: 我得到的最接近的是 这是我从这篇文章中得到的,但我不知道如何调整它来得到我想要的。我知道我可以取rowmeans的平均值来得到每组的平均值,但这不适用于标准差。

  • 问题内容: 这是我的问题,我有一个像这样的数据框: 我只想计算整个数据帧的平均值,因为以下方法不起作用: 然后我想出了: 但是,此技巧不适用于计算标准偏差。我最后的尝试是: 除了在后一种情况下,它使用了numpy中的mean()和std()函数。这不是平均值的问题,而是std的问题,因为pandas函数默认使用,而不是numpy的where 。 问题答案: 您可以将数据框转换为单列(将形状从5x3

  • 我有一个10data.frames的列表,我只需要为每个data.frame划分两列,然后计算相对均方差。 我想用lapplication。 下面是列表中包含的一个data.frame的示例: 我必须对我的所有10个数据帧执行以下操作:

  • 问题内容: 有没有一种方法可以使用Boost计算包含样本的向量的均值和标准差? 还是我必须创建一个累加器并将向量馈入其中? 问题答案: 使用累加器 是 在Boost中计算均值和标准差的方法。