在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。在转到下一列之前,是否有一种方法可以在到达列的末尾时重置全局变量?只需重置列之间的全局变量即可。我已经更新了答案中的代码。