I have a df like below:
time sb bn bs
2020-04-07 True False
2020-04-08 True False
2020-04-09 True False
2020-04-13 False False
2020-04-14 False False
2020-04-15 False False
2020-04-16 False False
2020-04-17 False False
2020-04-20 False False
2020-04-21 False True
2020-04-22 False False
2020-04-23 False False
And condition like below:
if -> bn and !sb then True
else if -> bs[1] and sb then False
else -> bs[1]
And my code:
conditions = [
(df["bn"] == True) & (df["sb"] == False),
(df["bs"].shift(1) == True) & (df["sb"] == True)]
choices = ["True", "False"]
df["bs"] = np.select(conditions, choices, default=df["bs"].shift(1))
I am getting an object not callable error. I think it is because of .shift(1). (I am using shift(1) for previous days data) The desired df with new bs column should be like:
time sb bn bs
2020-04-07 True False False
2020-04-08 True False False
2020-04-09 True False False
2020-04-13 False False False
2020-04-14 False False False
2020-04-15 False False False
2020-04-16 False False False
2020-04-17 False False False
2020-04-20 False False False
2020-04-21 False True True
2020-04-22 False False True
2020-04-23 False False True
What am I doing wrong? Thank you
df["bs"].shift(1)is a Series, butnp.select()expects a scalar value as thedefaultparameter.