计算pandas数据框中的数据参数

时间:2017-11-06 22:44:29

标签: python pandas jupyter-notebook

我有以下pandas数据框:

代码:

df = pd.DataFrame({'A1': [0.1,0.5,3.0, 9.0], 'A2':[2.0,4.5,1.2,9.0],'Random 
data':[300,4500,800,900],'Random data2':[3000,450,80,90]})

输出:

    A1  A2  Randomdata  Randomdata2
0   0.1 2.0    300            3000
1   0.5 4.5    4500           450
2   3.0 1.2    800            80
3   9.0 9.0    900            90

它只显示A1和A2,但它实际上从数据。我想计算每一行的平均值和标准偏差,但只计算A1到A30列(不包括Randomdata和Randomdata2列),并添加2个新的列,其平均值和标准差如下所示。

     A1 A2  Randomdata  Randomdata2  Average   Stddev
0   0.1 2.0    300            3000
1   0.5 4.5    4500           450
2   3.0 1.2    800            80
3   9.0 9.0    900            90

1 个答案:

答案 0 :(得分:2)

首选方法
使用pd.DataFrame.filter
您对regex pattern的选择可以如您所愿。在这种情况下,我指定该列必须以'A'开头并且之后有一个或多个数字。

d = df.filter(regex='^A\d+')
df.assign(Average=d.mean(1), Stddev=d.std(1))

    A1   A2  Random data  Random data2  Average    Stddev
0  0.1  2.0          300          3000     1.05  1.343503
1  0.5  4.5         4500           450     2.50  2.828427
2  3.0  1.2          800            80     2.10  1.272792
3  9.0  9.0          900            90     9.00  0.000000

替代1
这太难了。

rnm = dict(mean='Average', std='Stddev')
df.join(df.T[df.columns.str.startswith('A')].agg(['mean', 'std']).T.rename(columns=rnm))

    A1   A2  Random data  Random data2  Average    Stddev
0  0.1  2.0          300          3000     1.05  1.343503
1  0.5  4.5         4500           450     2.50  2.828427
2  3.0  1.2          800            80     2.10  1.272792
3  9.0  9.0          900            90     9.00  0.000000