Pandas数据框中包含范围的行的平均值



对于以下数据帧

AA         BB        CC        DD
0   4.456648e+02  36.120182  1.707122  0.332993
1   3.974615e+02   8.733798  0.346957  0.332993
2   4.750258e+00   5.197949  0.365944  0.332993

我想计算具有这里描述的范围的行的平均值。例如,我写:

df['mean1'] = df.iloc[:, 0:1].mean(axis=1)
df['mean2'] = df.iloc[:, 2:3].mean(axis=1)

因此,mean1是AA和BB的平均值,mean2是CC和DD的平均值,但它不是如下所示:

AA         BB        CC        DD         mean1     mean2
0   4.456648e+02  36.120182  1.707122  0.332993  4.456648e+02  1.707122
1   3.974615e+02   8.733798  0.346957  0.332993  3.974615e+02  0.346957
2   4.750258e+00   5.197949  0.365944  0.332993  4.750258e+00  0.365944

如何解决这个问题?

Python切片end值是排他性的,而不是包容性的,因此您有效地取AACC的平均值。您需要将end值增加1,以便在每个平均值中包含BBDD:

df['mean1'] = df.iloc[:, 0:2].mean(axis=1)
df['mean2'] = df.iloc[:, 2:4].mean(axis=1)

输出:

AA         BB        CC        DD       mean1     mean2
0  445.664800  36.120182  1.707122  0.332993  240.892491  1.020058
1  397.461500   8.733798  0.346957  0.332993  203.097649  0.339975
2    4.750258   5.197949  0.365944  0.332993    4.974104  0.349468

在python中,切片的语法为start:stop:step,其中结果从开始(包括)到停止(但不包括),step的增量。第三个参数默认为1。

在您的示例中,行切片0:1仅包含第0行。同样,2:3只包含第2行。

最新更新