在Python中跨列应用多个函数(Mean、STD等)
我有4列8行的数据在Python中跨列应用多个函数(Mean、STD等),python,pandas,Python,Pandas,我有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
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另一种方式:
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
另一种方式:
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
你可以用形容词
你可以用形容词
借用了你的T:-@Wen,它不是我的-它属于熊猫和Numpy!:-DAlso你可以加上这个df['mean',df['std']=df['A','C'].意思是1,df['A','C']。std1@Dark,为什么你不想把它作为一个答案呢?:@M.irfan你不能就这样做吗,即df.loc[df.time.between2,7,['A','C']]你的T:-@Wen,它不是我的-它是熊猫和小矮人的!-所以你可以加上这个df['mean',df['std']=df['A','C'].意思是1,df['A','C']。std1@Dark,为什么你不想把它作为一个答案呢?:@M.irfan你不能就这样做吗,即df.loc[df.time.between2,7,['A','C']].T.Aggreat.但是我在寻找一系列行,比如从时间=2开始到时间=7。@M.irfan你已经自己做了我想df.loc[df.time>=2&df.timeYes.非常感谢。很好。但是我在寻找一系列行,比如从时间=2开始到时间=7。@M.irfan你已经自己做了我想df.loc[df.time>=2&df.time是的,非常感谢。
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