想象一下,你有一个简单的数据框
low_signal high_signal condition prevision
0 1.2 1.3 1 1.7
1 1.7 1.8 1 1.8
2 1.9 2.0 1 1.9
3 1.6 1.7 -1 1.5
4 1.3 1.4 -1 1.4
现在我想研究我的预测是否正确,如果是的话我想知道时间(在这种情况下我们可以说它等于指数)
我的第一个条件
if df.condition == 1
第二个是检查df.prevision
是否会低于或等于df.low_signal
。
如果该条件为True,那么
return is the index (in study) of the df.predicted - the index of df.low_signal
low_signal high_signal condition prevision verification
0 1.2 1.3 1 1.7 1
1 1.7 1.8 1 1.8 1
2 1.9 2.0 1 1.9 0
3 1.6 1.7 -1 1.5 1
4 1.3 1.4 -1 1.4 0
这仅适用于df.condition == 1
df.condition == -1
几乎相同,但检查是df.prevision will ever be greater or equal than the df.high_signal
答案 0 :(得分:2)
解决问题的简单方法:
In [18]:
df['verification'] = ((df['high_signal'] <= df['prevision']) & (df['condition'] == 1)) \
| ((df['low_signal'] <= df['prevision']) & (df['condition'] == -1))
In [19]:
df
Out[19]:
low_signal high_signal condition prevision verification
0 1.2 1.3 1 1.7 True
1 1.7 1.8 1 1.8 True
2 1.9 2.0 1 1.9 False
3 1.6 1.7 -1 1.5 False
4 1.3 1.4 -1 1.4 True
可能你知道在python中,True和False对应于1和0,但是如果你想将verification
列看作int,那就行了:
In [20]:
df['verification'] = df['verification'].astype(int)
希望它有所帮助。
编辑:我根据您的评论更新答案。我不太了解功能要求,但无论如何,如果你有更复杂的操作,你可以使用熊猫&#39; apply
在你的情况下有点棘手:
apply
功能中的索引,我认为您不能但无论如何,要解决您在评论中添加的表达式,您可以先在数据框中添加一个包含索引副本的列,
In [27]:
df['index_cp'] = df.index
然后使用apply函数
In [28]:
len_df = len(df)
def f(x):
for n in range(len_df):
if x.condition == 1 & (x.prevision <= df.low_signal[n]):
return n - x.index_cp
df.apply(f, axis=1)
Out[28]:
0 1
1 1
2 0
3 NaN
4 NaN
dtype: float64
可能你需要修改这个功能,但正如我所说,我没有得到&#34;功能&#34;查看,我刚刚实施了您发布的内容。希望它有所帮助。