Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种简单的方法可以找到熊猫系列中最后一个连续的真值?_Python_Pandas_Series - Fatal编程技术网

Python 有没有一种简单的方法可以找到熊猫系列中最后一个连续的真值?

Python 有没有一种简单的方法可以找到熊猫系列中最后一个连续的真值?,python,pandas,series,Python,Pandas,Series,我有一个小数据框,其中bool值表示三个参数的最佳范围 在调试器中看起来如下所示: (Pdb) p insensistive_ranges.loc[-0.2:0.2] P Q n -0.20 False True False -0.16 False True False -0.12 True True False -0.08 True True False -0.04 True False False 0.0

我有一个小数据框,其中bool值表示三个参数的最佳范围

在调试器中看起来如下所示:

(Pdb) p insensistive_ranges.loc[-0.2:0.2]
           P      Q      n
-0.20  False   True  False
-0.16  False   True  False
-0.12   True   True  False
-0.08   True   True  False
-0.04   True  False  False
 0.00   True   True   True
 0.04  False  False   True
 0.08  False   True   True
 0.12  False   True  False
 0.16  False   True  False
(当指数==0.00时为最佳值)

我想返回上一个连续真值的索引,每个参数从0.0开始向上计数,也从0.0开始向下计数。换言之,这:

(Pdb) p highest
P    0.00
Q    0.00
n    0.08
(Pdb) p lowest
P   -0.12
Q    0.00
n    0.00
最接近的是这个,但它在每个方向上都走得太远了一步(找到第一个非真值,而不是最后一个连续的真值):

有什么想法吗

(请注意,您不能从
非敏感_范围的开始或结束处开始,因为每个系列中可能存在其他从0.0开始不连续的真值


有一些创新的numpy数组方法解决方案,但它们看起来相当复杂。

我们需要为连续的真/假组创建一个计数器。然后为
0
组的每个列找到最大和最小索引

df1 = df.ne(df.shift(1)).cumsum().copy()

# Lowest
df1.eq(df1.loc[0]).idxmax()
P   -0.12
Q    0.00
n    0.00
dtype: float64

# Highest
df1.eq(df1.loc[0])[::-1].idxmax()
#P    0.00
#Q    0.00
#n    0.08
#dtype: float64

很好。找到了~df的最大累积和。我花了一段时间来恢复头脑,但这很聪明。现在似乎不起作用。在你的更新之后,我没有得到正确的结果。@Bill,嗯,好吧,我必须考虑一下为什么,也许我没有考虑过一个案例。但我会返回到有效的解决方案。它仍然不起作用。我知道t
0.04,0.00,0.00
第一个和
-0.08,-0.04,0.00
第二个。我们可以回到我认为的第一个解决方案吗?等等,看起来我的数据已经改变了,所以让我花几分钟来处理这个问题。
df1 = df.ne(df.shift(1)).cumsum().copy()

# Lowest
df1.eq(df1.loc[0]).idxmax()
P   -0.12
Q    0.00
n    0.00
dtype: float64

# Highest
df1.eq(df1.loc[0])[::-1].idxmax()
#P    0.00
#Q    0.00
#n    0.08
#dtype: float64