测试后续值我有正,负整数一列的数据帧。对于每一行,我想看看有多少连续行(从当前行开始并包括当前行)具有负值。在数据帧
所以,如果一个序列是2, -1, -3, 1, -1
,其结果将是0, 2, 1, 0, 1
。
我可以通过遍历所有索引,使用.iloc
拆分列和next()
来找出下一个正值的位置。但我觉得这不是利用熊猫的能力,我想有更好的方法来做到这一点。我已经尝试使用.shift()
和expanding_window
但没有成功。
有没有找出多少个连续行当前的后遇到一些逻辑条件更加“pandastic”的方式?
这里是什么工作现在:
import pandas as pd
df = pd.DataFrame({"a": [2, -1, -3, -1, 1, 1, -1, 1, -1]})
df["b"] = 0
for i in df.index:
sub = df.iloc[i:].a.tolist()
df.b.iloc[i] = next((sub.index(n) for n in sub if n >= 0), 1)
编辑:我意识到,当有在年底超过一个负值,即使我自己的例子不工作。因此,更好的解决方案更加必要。
编辑2:我说这个问题在整数的条件,但最初只放1
和-1
在我的例子。一般来说,我需要解决积极和消极的整数。
这与我正要写的内容更接近,但是您可以通过执行诸如'cumcount(ascending = False)+ 1'之类的操作来简化。尽管如此,我也懒得去检查边缘案例。 :-) – DSM
@DSM谢谢,做出了改变。更简单,快得多。 – JohnE
当DataFrame只包含'1'和'-1'时,它的工作效果很好,但是当它们采用其他值时它不会工作。这个错误是我的,因为我混淆了我的问题 - 我用整数来描述我的问题,但在这个例子中我只放了'1'和'-1'。 (不过,我仍然赞成,因为它解决了这个例子)。 – ASGM