pandas DataFrame - 根据条件为真比较两列

时间:2016-01-27 18:07:53

标签: python pandas iteration dataframe

我有以下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,如果没有发生则返回TrueFalse,然后继续从剩下的点开始迭代BR

即。第2行BR = Truelow第2行与Support第1行进行比较,直至第5行low < Support,继续从第3行迭代BR

我可以使用for循环和if语句,但这是一个大型数据集,这需要很长时间,所以我希望有一个优化的方式,熊猫可以处理这个。我已经尝试了地图和应用,但似乎无法超越逐项迭代每一行的需要。

1 个答案:

答案 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)