对于以下数据帧
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
值是排他性的,而不是包容性的,因此您有效地取AA
和CC
的平均值。您需要将end
值增加1,以便在每个平均值中包含BB
和DD
:
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行。