我有这个 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
关于python - 在 Python 中跨列应用多个函数(均值、STD 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677042/