我有以下pandas数据框:
df = pd.DataFrame({'Open': [1.20443, 1.20438, 1.20464, 1.20443, 1.20443, 1.2049, 1.20444, 1.20443],
'High': [1.20447, 1.20467, 1.20497, 1.20446, 1.20447, 1.20505, 1.20446, 1.20446],
'Low': [1.20429, 1.20436, 1.20464, 1.20439, 1.20429, 1.20350, 1.20441, 1.20439],
'Close': [1.20438, 1.20466, 1.20486, 1.20439, 1.20438, 1.20497, 1.20446, 1.20439],
'Support': [1.20346, 1.20346, 1.20361, 1.20363, 1.20362, 1.20364, 1.20367, 1.20360],
'BR': [False, False, True, False, False, True, False, False]})
我想要做的是遍历列BR
直到True
,然后将Low
的行值与前一行值Support
进行比较,并从该点单位Low
小于Support
,如果没有发生则返回True
或False
,然后继续从剩下的点开始迭代BR
。
即。第2行BR = True
将low
第2行与Support
第1行进行比较,直至第5行low < Support
,继续从第3行迭代BR
。
我可以使用for循环和if语句,但这是一个大型数据集,这需要很长时间,所以我希望有一个优化的方式,熊猫可以处理这个。我已经尝试了地图和应用,但似乎无法超越逐项迭代每一行的需要。
答案 0 :(得分:0)
也许np.where
。
df['Answer'] = np.where((df['BR'] == True) & (df['Low'] < df['Support']), True,
np.where((df['BR'] == True) & (df['High'] > 1.20504), True,
False))
或者您可以将其合并为一个np.where
:
df['Answer'] = np.where(((df['BR'] == True) & (df['Low'] < df['Support'])) | (df['BR'] == True) & (df['High'] > 1.20504), True,
False)