【发布时间】:2019-01-14 22:44:30
【问题描述】:
我是一个新的 Python 用户(从 VBA 转换)并且无法弄清楚 Python 的循环函数。我有一个数据框 df,我想根据循环在另一列中满足某些条件来创建一列变量。类似于以下内容:
cycle = 5
dummy = 1
for i = 1 to cycle
if df["high"].iloc[i] >= df["exit"].iloc[i] and
df["low"].iloc[i] <= df["exit"].iloc[i] then
df["signal"] = dummy
break
elif i = cycle
df["signal"] = cycle + 1
break
else:
dummy = dummy + 1
next i
基本上试图找出循环变量之前的下一列中的哪一列是 if 语句中的条件满足,如果它们从未满足,则分配循环 + 1。所以df["signal"] 将是一列范围为 1 -> (cycle + 1) 的数字。另外,df["exit"] 中有一些 NaN 值,不确定它对循环有何影响。
我在网站上找到了相当广泛的关于行迭代的文档,我觉得 like this is close to where I need to get to,但不知道如何调整它。感谢您的建议!
编辑:包含以下 EXCEL 单元格的数据样本:
high low EXIT test signal/(OUTPUT COLUMN)
4 3 4 1 1
2 2 2 1 1
2 3 5 0 6
4 3 1 0 5
2 5 2 0 4
5 5 1 0 3
3 1 5 0 2
5 1 5 1 1
1 1 4 0 0
编辑 2:关于脚本的进一步说明 一旦条件
df["high"].iloc[i] >= df["exit"].iloc[i] and
df["low"].iloc[i] <= df["exit"].iloc[i]
在循环中遇到,它应该为那个特定的实例/行终止。
编辑 3:预期输出
预期的输出是 df["signal"] 列 - 它是循环中条件的第一个实例
df["high"].iloc[i] >= df["exit"].iloc[i] and
df["low"].iloc[i] <= df["exit"].iloc[i]
在任何给定的行中都满足。 df["signal"] 中的输出实际上是来自循环或给定迭代的i。
【问题讨论】:
-
您可以发布您的示例数据和输出吗?在这种情况下,你会得到更多的答案和建议。
-
我不确定我是否理解
then和break。我不知道 VBA,但这看起来像是提前终止了。 -
@roganjosh,是的,澄清一下,一旦在循环中满足条件,它就会终止
-
有趣...我无法可视化预期的输出,因为这似乎表明任何比例的数据都可能未处理。一旦满足某些停止条件,您能否展示您的预期输出?
-
请在问题本身中发布您期望的输出。
标签: python excel pandas dataframe