在Python中跨列应用多个函数(Mean、STD等)

2024-04-26 09:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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列的平均值和标准差,跨列而不是跨行。e、 g 2和7的平均值和标准差分别为“”(平均值)和“3.535533906”(标准差),如下所示。你知道吗

我希望我的结果是这样的。。。你知道吗

      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'])

但它给出了所有行的平均值和标准值的结果

                 A         C
    mean  4.166667  7.500000
    std   3.125167  0.547723

我该怎么修?你知道吗


Tags: columns数据dataframedftime错误meanloc
2条回答

您可以使用describe

df[['A','C']].T.describe().T[['mean','std']]
Out[865]: 
   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

另一种方式:

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

相关问题 更多 >