Pandas计算二进制数据均值时,参考类别选择逻辑是什么?
我正在使用泰坦尼克号数据集,其中1代表“存活”,0代表“未存活”。为了计算各舱位等级(Pclass)的人员存活百分比,我运行了以下代码:
pclass_survived = df.groupby('Pclass')['Survived'].mean() * 100
得到结果:
Pclass 1 62.962963 2 47.282609 3 24.236253
我知道Pandas会把二进制值(0和1)当作普通数值处理,不懂它们的业务含义,但疑惑的是:为什么Pandas默认返回的是“存活”(1)的比例,而非“未存活”(0)的比例?比如如果后续标记规则翻转,1代表“未存活”、0代表“存活”,计算结果就会传递错误信息。想知道Pandas计算二进制数据均值时,是如何选择参考类别的?
Pandas这里根本没有“选择参考类别”的逻辑——它只是在做纯粹的数值均值计算。
对于0/1的二进制数据来说,均值的计算逻辑是:(分组内所有值的总和) / (分组内样本总数)。而分组内所有值的总和,本质就是该组中等于1的样本数量(因为0加进去不影响总和)。所以最终的均值,自然就是1在该组中的占比,这完全是数学运算的自然结果,不是Pandas主动“选”了1作为参考。
举个简单例子:假设某舱位组有10个人,其中4个存活(标记为1),6个未存活(标记为0)。总和是4,均值就是4/10=0.4,也就是40%——对应1的占比(存活比例)。如果标记规则翻转,1代表未存活,那这组的总和就是6,均值60%,对应的就是未存活的比例。
说白了,Pandas从始至终都不知道这些0和1代表什么业务含义,它只负责执行数学计算。要避免歧义的话,你可以在代码里明确标注业务逻辑,或者根据需要手动调整结果:比如要计算未存活比例,直接用100 - pclass_survived,或者(1 - df.groupby('Pclass')['Survived'].mean()) * 100。
内容的提问来源于stack exchange,提问作者Partha Pratim Sarma

