我正在对两列中的True值运行测试,而前两行 - 基本上如果任一列为true或前两个值if应返回true。
我想出了这个,有效:
Data['BS Buy Flag']=((Data['DivDown']==True) | (Data['DivDown'].shift(1)==True) | (Data['DivDown'].shift(2)==True) | (Data['KelknerDown']==True) | (Data['KelknerDown'].shift(1)==True) | (Data['KelknerDown'].shift(2)==True))
但它非常不合理 - 必须有更好的方法来做到这一点......
答案 0 :(得分:0)
可能不值得(计算/内存方面),但如果你的代码伤害了你的骄傲并让你夜不能寐,你可以试试这个:
df_list = [Data['DivDown'],
Data['DivDown'].shift(1),
Data['DivDown'].shift(2),
Data['KelknerDown'],
Data['KelknerDown'].shift(1),
Data['KelknerDown'].shift(2)]
# Create a new df using df_list, preserving index
check_df = reduce(lambda x, y, pd.merge(x.to_frame(), y.to_frame(), left_index=True, right_index=True), df_list)
# Write over check_df with result
check_df = check_df.any(axis=1) # Returns True if any value in a row is True
# Merge check_df to original data
Data = pd.merge(check_df.to_frame(), Data, left_index=True, right_index=True, how='inner')
您现在应该在Data中有一个可以检查的附加列。就像我说的那样,除非你拥有非常庞大的数据集,否则它可能效率不高,或者你需要跟踪的条件非常多。
如果需要,您还可以存储其他分析的条件(特征选择,聚类等)