Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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 - Fatal编程技术网

在python中有条件地更新数据帧?

在python中有条件地更新数据帧?,python,pandas,Python,Pandas,我想基于两个不同的阈值创建一个1/0或True/False的数据帧。我目前有这样一个数据帧: col1 col2 col3 col4... time 0 0.42 0.01 0.02 0.33 1 0.51 0.02 0.01 0.45 2 0.35 0.00 0.48 0.67 我想根据value>0.4的“开”阈值和value0.4: 阈值\u

我想基于两个不同的阈值创建一个
1/0
True/False
的数据帧。我目前有这样一个数据帧:

          col1    col2    col3    col4...
    time
       0  0.42    0.01    0.02    0.33
       1  0.51    0.02    0.01    0.45
       2  0.35    0.00    0.48    0.67
我想根据
value>0.4的“开”阈值和
value<0.3的“关”阈值创建一个新的数据帧:

          col1    col2    col3    col4...
    time
       0     1       0       0       0
       1     1       0       0       1
       2     1       0       1       1
因此,即使
(time=2,col1)
小于0.4,它仍然接受值1,因为它前面的值是1,而值大于0.3。

阈值函数最后一次=0
threshold_func_last = 0
def reset_threshold_func():
    global threshold_func_last
    threshold_func_last = 0

def threshold_func(value):
    global threshold_func_last
    if value > 0.4:
        threshold_func_last = 1
    elif value < 0.3:
        threshold_func_last = 0
    return threshold_func_last

df_out = pd.DataFrame()
for column in df.columns:
    reset_threshold_func()
    df_out[column] = df[column].apply(threshold_func)
def reset_threshold_func(): 全局阈值函数 阈值\u func\u last=0 def阈值函数(值): 全局阈值函数 如果值>0.4: 阈值\u func\u last=1 elif值<0.3: 阈值\u func\u last=0 返回阈值\u func\u last df_out=pd.DataFrame() 对于df.columns中的列: 重置阈值函数() df_out[column]=df[column]。应用(阈值函数)
阈值函数最后一次=0
def reset_threshold_func():
全局阈值函数
阈值\u func\u last=0
def阈值函数(值):
全局阈值函数
如果值>0.4:
阈值\u func\u last=1
elif值<0.3:
阈值\u func\u last=0
返回阈值\u func\u last
df_out=pd.DataFrame()
对于df.columns中的列:
重置阈值函数()
df_out[column]=df[column]。应用(阈值函数)

那么,当值为0.4而不是>0.4时,为什么时间0和列1等于on?因为我还有一个值<0.3的附加“关闭”阈值。因此
如果第1行中的值==1&&value<0.3,则值=0
但是
如果第1行中的值==0&&value<0.4,则值=0
。旨在作为一种控制,阻止每行值在1和0之间变化,除非有(相对)较大的跳转。因此,如果时间0/col1的值为0.31,则会考虑启用它吗?那么为什么时间0列4不开呢?不清楚您的意思是
还是
=
,那么您是在寻找
np.logical\u还是((df>0.4),(df.shift()>=0.3)).astype(int)
?所以
开阈值=0.4
关阈值=0.3
。若要成为
1
值必须是
>on_threshold
,一旦列位于
1
处,
值必须满足
的要求,那么当值为0.4而不是>0.4时,为什么时间0和列1等于on?因为我有额外的“关闭”阈值<0.3。因此
如果第1行中的值==1&&value<0.3,则值=0
但是
如果第1行中的值==0&&value<0.4,则值=0
。旨在作为一种控制,阻止每行值在1和0之间变化,除非有(相对)较大的跳转。因此,如果时间0/col1的值为0.31,则会考虑启用它吗?那么为什么时间0列4不开呢?不清楚您的意思是
还是
=
,那么您是在寻找
np.logical\u还是((df>0.4),(df.shift()>=0.3)).astype(int)
?所以
开阈值=0.4
关阈值=0.3
。要成为
1
值必须在
>阈值上
,一旦列位于
1
值必须满足
这几乎是我需要的,除了现在,
col4
中的第一个值显示为1,因为它大于
0.3
,而
col3
的最后一个值大于0.4。在转到下一列之前,是否有一种方法可以在到达列的末尾时重置全局变量?只需重置列之间的全局变量即可。我已经更新了答案中的代码。这几乎就是我需要的,只是现在
col4
中的第一个值显示为1,因为它大于
0.3
,而
col3
的最后一个值大于0.4。在转到下一列之前,是否有一种方法可以在到达列的末尾时重置全局变量?只需重置列之间的全局变量即可。我已经更新了答案中的代码。