Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 如何在pandas中创建逻辑,以基于其他列中的现有值创建新列?_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何在pandas中创建逻辑,以基于其他列中的现有值创建新列?

Python 如何在pandas中创建逻辑,以基于其他列中的现有值创建新列?,python,python-3.x,pandas,Python,Python 3.x,Pandas,在这个问题中,我试图理解何时应该根据“值”生成警报 如果前5个值高于10,则会创建警报。警报将继续保持激活状态,直到该值低于7.5。现在,一旦警报不再处于活动状态且达到前5个值高于10的阶段,则会再次创建警报 如何创建列以确定它是“警报”还是未使用熊猫 感谢所有的帮助 Value Is Previous 5 Is the value greater Is it an Alert? Rolling than 7.5? G

在这个问题中,我试图理解何时应该根据“值”生成警报

如果前5个值高于10,则会创建警报。警报将继续保持激活状态,直到该值低于7.5。现在,一旦警报不再处于活动状态且达到前5个值高于10的阶段,则会再次创建警报

如何创建列以确定它是“警报”还是未使用熊猫

感谢所有的帮助

Value Is Previous 5      Is the value greater        Is it an Alert?
        Rolling               than 7.5?
     Greater than 10?       
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  Yes                  Yes                       Yes
11  Yes                  Yes    
11  Yes                  Yes    
8   No                   Yes    
9   No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  Yes                  Yes    
8   No                   Yes    
9   No                   Yes    
6   No                    No    
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  No                   Yes    
11  Yes                  Yes                       Yes

NUM_PREV_ROWS = 5
PREV_5_THRESHOLD = 10.0
PREV_THRESHOLD = 7.5
df = pd.DataFrame([11,11,11,11,11,11,11,8,9,11,11,11,11,11,8,9,6,11,11,11,11,11], columns=['value'])

df['prev>10'] = df['value']>PREV_5_THRESHOLD
df['prev5>10'] = df['prev>10'].rolling(NUM_PREV_ROWS).sum()
df['prev>7.5'] = df['value']>PREV_THRESHOLD 

alert = False
alert_series = []
for row in df.iterrows():
    if row[1]['prev5>10']==NUM_PREV_ROWS:
        alert = True
    if row[1]['prev>7.5']==False:
        alert = False
    alert_series.append(alert)

df['alert'] = alert_series
print(df)

    value  prev>10  prev5>10  prev>7.5  alert
0      11     True       NaN      True  False
1      11     True       NaN      True  False
2      11     True       NaN      True  False
3      11     True       NaN      True  False
4      11     True       5.0      True   True
5      11     True       5.0      True   True
6      11     True       5.0      True   True
7       8    False       4.0      True   True
8       9    False       3.0      True   True
9      11     True       3.0      True   True
10     11     True       3.0      True   True
11     11     True       3.0      True   True
12     11     True       4.0      True   True
13     11     True       5.0      True   True
14      8    False       4.0      True   True
15      9    False       3.0      True   True
16      6    False       2.0     False  False
17     11     True       2.0      True  False
18     11     True       2.0      True  False
19     11     True       3.0      True  False
20     11     True       4.0      True  False
21     11     True       5.0      True   True