我有以下 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 数据。我想计算每行的平均值和标准差,但只计算 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
最佳答案
首选方法
使用pd.DataFrame.filter
您对 regex
pattern
的选择可以像您希望的那样明确。在本例中,我指定该列必须以 'A'
开头,后面有 1 个或多个数字。
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
关于python - 计算pandas数据框中的数据参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47147106/