列的平均值会有所不同

Posted

技术标签:

【中文标题】列的平均值会有所不同【英文标题】:Mean of column varies based 【发布时间】:2021-07-18 09:15:15 【问题描述】:

我有一些代码可以计算所有大于或等于零的值的列平均值。出于某种原因,当我从后面开始使用 .iloc[-1:] 时,我会得到不同的输出,而不是只做整列或从其他地方开始。

dtest = 'col1': [1, -2, -1, -1, -5], 'col2': [3, 4, -2, -1, -5]
dftest = pd.DataFrame(data=dtest)
dftest

dftest[dftest['col2'] >= 0].iloc[-1:].mean().values[1]

当我运行这段代码时,我得到的平均值是 4.0

但是当我用 iloc[:] 运行这段代码时

dftest[dftest['col2'] >= 0].iloc[:].mean().values[1]

我得到 3.5

而 iloc[-2:] 或 [0:] 或 [-0:] 也给我 3.5。

为什么不一样?

【问题讨论】:

【参考方案1】:
dftest[dftest['col2'] >= 0].iloc[-1:].mean().values[1]

在上面的代码中,当你使用过滤器[dftest['col2'] >= 0]时,过滤后的数据框包含前2个元素,即正整数3和4。当你做iloc[-1:]时,它选择最后一个元素4. 取单个元素的平均值,结果为 4

如果使用iloc[:] 而不是iloc[-1:],则选择所有元素,即3 和4,使其均值等于3.5

理解负整数索引很重要。当使用像[-n:]这样的索引时,他们会选择最后n个元素

当您执行iloc[-2:0] 时,您选择最后两个元素(3 和 4)。 iloc[0:]iloc[-0:] 一样,因为 -0 也是 0,它选择索引 0 到系列末尾的所有项目,即 3 和 4 都

【讨论】:

【参考方案2】:

就像 Yati 所说,索引器 [-1:] 不会成功。从后面开始,它看起来像这样:

dftest[dftest['col2'] >= 0].iloc[::-1].mean().values[1]
#--or--
dftest['col2'][dftest['col2'] >= 0].iloc[::-1].mean()

平均为 3.5。

【讨论】:

以上是关于列的平均值会有所不同的主要内容,如果未能解决你的问题,请参考以下文章

基于不同列的具有可变窗口的 Pandas 滚动平均值

HIVE中不同列的平均函数

具有不同切片的二维 numpy 数组的平均值

Google Sheets ArrayFormula - 前行的平均值

从旧数据帧创建一个新数据帧,其中新数据帧包含旧数据帧中不同位置的列的行平均

使用dplyr汇总多个列的不同操作