列的平均值会有所不同
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。
【讨论】:
以上是关于列的平均值会有所不同的主要内容,如果未能解决你的问题,请参考以下文章
Google Sheets ArrayFormula - 前行的平均值