【发布时间】:2019-09-21 03:22:22
【问题描述】:
我在 Python 2.7 中工作,我有一个数据框,我想获得名为“c”的列的平均值,但只有验证另一列中的值是否等于某个值的行。 当我执行代码时,答案出乎意料,但是当我执行计算时,计算中位数,结果是正确的。
为什么均值的输出不正确?
代码如下:
df = pd.DataFrame(
np.array([['A', 1, 2, 3], ['A', 4, 5, np.nan], ['A', 7, 8, 9], ['B', 3, 2, np.nan], ['B', 5, 6, np.nan], ['B',5, 6, np.nan]]),
columns=['a', 'b', 'c', 'd']
)
df
mean1 = df[df.a == 'A'].c.mean()
mean2 = df[df.a == 'B'].c.mean()
median1 = df[df.a == 'A'].c.median()
median2 = df[df.a == 'B'].c.median()
输出:
df
Out[1]:
a b c d
0 A 1 2 3
1 A 4 5 nan
2 A 7 8 9
3 B 3 2 nan
4 B 5 6 nan
5 B 5 6 nan
mean1
Out[2]: 86.0
mean2
Out[3]: 88.66666666666667
median1
Out[4]: 5.0
median2
Out[5]: 6.0
很明显,均值的输出是不正确的。
谢谢。
【问题讨论】:
-
您的列是 dtype
object,它正在执行字符串连接然后划分,这一定是无意的... -
@yatu [2,6,6]的中位数是6,是正确的,但是[2,6,6]的平均值不是86.6。
-
请更改您帖子的最后一行“很明显,媒体的输出不正确。”从媒体到意思。