Python 有没有一种简单的方法可以找到熊猫系列中最后一个连续的真值?
我有一个小数据框,其中bool值表示三个参数的最佳范围 在调试器中看起来如下所示: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
(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,嗯,好吧,我必须考虑一下为什么,也许我没有考虑过一个案例。但我会返回到有效的解决方案。它仍然不起作用。我知道t0.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