pandas 如何使用基于其自身先前值的条件来定义 Dataframe 的列?

6ovsh4lw  于 2022-12-09  发布在  其他
关注(0)|答案(2)|浏览(87)

假设我有一个 Dataframe ,df如下,它有一个'Value'列,我也想应用一些布尔分析。

date     Value 
10/11    0.798
11/11    1.235
12/11    0.890
13/11    0.756
14/11    0.501
...

实际上,我希望创建一个新列,当值大于1时,该列切换到TRUE,并且在值低于0.75时保持为真。例如,使用df时,该列将如下所示:

column
FALSE
TRUE
TRUE
TRUE
FALSE

我正在努力寻找一种合适的方法来引用我正在定义的列的前一个值,而不会遇到一些错误。我想使用的逻辑如下:
df['column'] = (df['value'] >= 1) | ((df['column'].shift(1) == True) & (df['value'] >= 0.75))
有没有一种方法,我可以实现这一点,而不过于复杂的事情?

ffx8fchx

ffx8fchx1#

可能的解决方案:

val1, val2 = 1, 0.75

out = (df.assign(
    new=df.Value.where(df.Value.gt(val1) | df.Value.lt(val2))
    .ffill().gt(val1)))

print(out)

输出量:

date  Value    new
0  10/11  0.798  False
1  11/11  1.235   True
2  12/11  0.890   True
3  13/11  0.756   True
4  14/11  0.501  False
hgncfbus

hgncfbus2#

实际上,使用apply调用函数可能会有所帮助,因为它具有一些“记忆”逻辑。

res = True

def CheckRow(row):
    global res
    if res == True:
        if row['value']>1.0:
            res = False #next time check for < 0.75
            return True
        else:
            return False
    else: #res == False
        if row['value']<0.75:
            res = True #next time check for above 1.0
            return False
        else:
            return True

df['column'] = df.apply(lambda x: CheckRow(x), axis = 1)

相关问题