我有一些代码计算所有大于或等于零的值的列平均值。由于某些原因,当我从后面用..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。
为什么会有不同?
发布于 2021-04-24 11:38:08
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两者都是。
发布于 2021-04-24 12:15:00
就像雅蒂说的,索引器-1:做不到这一点。从后面开始,它看起来是这样的:
dftest[dftest['col2'] >= 0].iloc[::-1].mean().values[1]
#--or--
dftest['col2'][dftest['col2'] >= 0].iloc[::-1].mean()这确实提供了平均3.5。
https://stackoverflow.com/questions/67242217
复制相似问题