首页
学习
活动
专区
圈层
工具
发布

列均值
EN

Stack Overflow用户
提问于 2021-04-24 11:20:43
回答 2查看 31关注 0票数 0

我有一些代码计算所有大于或等于零的值的列平均值。由于某些原因,当我从后面用..iloc 1开始时,我得到了一个不同的输出,而不是只做整个专栏或者从其他地方开始。

代码语言:javascript
复制
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运行这个代码时

代码语言:javascript
复制
dftest[dftest['col2'] >= 0].iloc[:].mean().values[1]

我得到3.5

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

为什么会有不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-24 11:38:08

代码语言:javascript
复制
dftest[dftest['col2'] >= 0].iloc[-1:].mean().values[1]

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

在使用iloc[:]而不是iloc[-1:]的情况下,选择所有元素,即3和4,使它们的平均值等于3.5

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

在执行iloc[-2:0]时,选择最后2个元素(3和4)。iloc[0:]iloc[-0:]相同,因为-0也是0,它选择索引0到系列末尾的所有项,也就是说,3和4两者都是。

票数 2
EN

Stack Overflow用户

发布于 2021-04-24 12:15:00

就像雅蒂说的,索引器-1:做不到这一点。从后面开始,它看起来是这样的:

代码语言:javascript
复制
dftest[dftest['col2'] >= 0].iloc[::-1].mean().values[1]
#--or--
dftest['col2'][dftest['col2'] >= 0].iloc[::-1].mean()

这确实提供了平均3.5。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67242217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档