你好,我有两个比率计算的数据帧。当我这样做的时候,我将每行和每列的平均值取一个平均值,这两个平均值在数据帧中不匹配
df1
name exm1 exm2 exm3 exm4
student1 0.43 0.36 0 1
student2 0 0 0 0.45
student3 0 0 0 0
student4 0.64 0 0.75 0.6
student5 0.12 0.23 0.57 0
student6 0 0 0 0.9
student7 0 1 0 0.3
student8 0.43 0.36 0 0.25
student9 0 0 0 0.58
student10 0 0 0 0
df2
name exm1 exm2 exm3 exm4
student1 0.57 0.64 0 0
student2 0 0 0 0.55
student3 0 0 0 1
student4 0.36 0 0.25 0.4
student5 0.88 0.77 0.43 0
student6 0 0 0 0.9
student7 0 0 0 0.3
student8 0 0 0 0.25
student9 0 0 0 0.58
student10 0 0 0 0
为了计算平均值,我使用了下面的代码
df1['average'] = df1.mean(numeric_only=True, axis=1)
df2['average'] = df2.mean(numeric_only=True, axis=1)
在两个数据帧中,当comapare average沿学生平均数不等于1时,导致此情况的主要原因是两个单元格中都存在0。例如,exm3中的student1的零和此类型的零使平均值不合适
name average_df1 average_df2 sum
student1 0.4475 0.451875 0.899375
student2 0.1125 0.140625 0.253125
student3 0 0 0
student4 0.4975 0.461875 0.959375
student5 0.23 0.2575 0.4875
student6 0.225 0.28125 0.50625
student7 0.325 0.40625 0.73125
student8 0.26 0.2175 0.4775
student9 0.145 0.18125 0.32625
student10 0 0 0
平均数之和应等于一。我怎样才能做到呢?有什么建议吗
您正在使用零来表示缺少的数据,同时它们也可以表示有效值
首先确定缺失值的位置,例如:
然后计算平均值:
应使用第一列作为索引:
这将更加简洁,并且可以避免使用诸如
loc[:, 1:]
或numeric_only=True
之类的不完整子句来跳过包含字符串值的列问题的关键在于:
.replace
所有{np.nan
一起,因此它们不会与其他数据帧一起计算平均值李>np.where
将NaN
值替换为0
李>代码:
输出(前5行按预期相加为1我不确定输入的最后5行中的数据是否错误,但无法将它们相加为1:
相关问题 更多 >
编程相关推荐