Skip to main content
 首页 » 编程设计

python之在 Python 中跨列应用多个函数(均值、STD 等)

2025年05月04日21lvdongjie

我有这个 4 列和 8 行的数据...

df = pd.DataFrame([[1, 2, 3,7], [2, 8, 6,8],[3, 2, 3,7], [4, 4, 6,8],[5, 2, 3,7], [6, 1, 6,8],[7, 8, 3,7], [8, 9, 6,8]], columns=['time','A', 'B', 'C']) 
 
       time  A  B  C 
    0     1  2  3  7 
    1     2  8  6  8 
    2     3  2  3  7 
    3     4  4  6  8 
    4     5  2  3  7 
    5     6  1  6  8   
    6     7  8  3  7 
    7     8  9  6  8 

我想获取 A 列和 C 列的均值和 STD,跨列而不是跨行。例如 2 和 7 的 Mean 和 STD 分别为 ""(平均值)和 "3.535533906"(STD),如下所示。

我希望我的结果看起来像这样......

      Mean  STD 
    0 4.7   3.535533906 
    1 8     0 
    2 .     . 
    3 .     . 
    . .     . 
    . .     . 

但是,当我尝试做的时候

df= df.loc[(df.time>=2) & (df.time<=7),['A','C']],(['mean','std'])

我收到以下错误...

AttributeError: 'DataFrame' 对象没有 'time' 属性

我也尝试通过这样做来找到解决方案,但徒劳无功:

df= df.loc[(df.time>=2) & (df.time<=7),['A','C']].agg(['mean','std']) 

但它给了我所有行均值和 STD 的结果。

                 A         C 
    mean  4.166667  7.500000 
    std   3.125167  0.547723 

我该如何解决?

请您参考如下方法:

另一种方式:

In [346]: df[['A','C']].T.agg(['mean','std']).T 
Out[346]: 
   mean       std 
0   4.5  3.535534 
1   8.0  0.000000 
2   4.5  3.535534 
3   6.0  2.828427 
4   4.5  3.535534 
5   4.5  4.949747 
6   7.5  0.707107 
7   8.5  0.707107 

或作为原始 DF 中的新列:

In [347]: df[['Mean','STD']] = df[['A','C']].T.agg(['mean','std']).T 
 
In [348]: df 
Out[348]: 
   time  A  B  C  Mean       STD 
0     1  2  3  7   4.5  3.535534 
1     2  8  6  8   8.0  0.000000 
2     3  2  3  7   4.5  3.535534 
3     4  4  6  8   6.0  2.828427 
4     5  2  3  7   4.5  3.535534 
5     6  1  6  8   4.5  4.949747 
6     7  8  3  7   7.5  0.707107 
7     8  9  6  8   8.5  0.707107