对于这个问题的糟糕措辞,我感到很遗憾,但这是我能做的最好的事情.我确切地知道我想要什么,但不知道如何要求它.
以下是一个示例演示的逻辑:
采用值1或0的两个条件触发一个也取值为1或0的信号.条件A触发信号(如果A = 1则信号= 1,否则信号= 0)无论如何.条件B不触发信号,但是如果条件B在条件A先前已经触发信号之后保持等于1,则信号保持触发.仅在A和B都返回到0之后,信号才返回到0.
1.输入:
2.期望的输出(signal_d)并确认for循环可以解决它(signal_l):
3.我尝试使用numpy.where():
4.可重复的代码片段:
# Settings
import numpy as np
import pandas as pd
import datetime
# Data frame with input and desired output i column signal_d
df = pd.DataFrame({'condition_A':list('00001100000110'),
'condition_B':list('01110011111000'),
'signal_d':list('00001111111110')})
colnames = list(df)
df[colnames] = df[colnames].apply(pd.to_numeric)
datelist = pd.date_range(pd.datetime.today().strftime('%Y-%m-%d'), periods=14).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
# Solution using a for loop with nested ifs in column signal_l
df['signal_l'] = df['condition_A'].copy(deep = True)
i=0
for observations in df['signal_l']:
if df.ix[i,'condition_A'] …Run Code Online (Sandbox Code Playgroud)