У меня есть две серии данных bool, которые я хотел бы объединить с новым объектом серии, но логика комбинации зависит от «истории» (предыдущие значения).Объединение двух рядов pandas с изменяющейся логикой
Серия 1 содержит в основном False, но не содержит значения True. Series2 обычно содержит периоды значений True или False - вероятность повторения значений довольно высока.
В результирующей серии мне нужны периоды значений bool, которые начинаются с раздела True, когда оба значения True и заканчиваются, когда раздел в Series2 заканчивается, i. е. больше не содержит True.
e. г.
s1 s2 result
0 False False False
1 False True False
2 True True True
3 False True True
4 False True True
5 True False False
6 False False False
В строке 2 результат переключается на Истинные и остается включенным, пока True-фаза в Series2 заканчивается на строке 5.
Это то, что я придумал до сих пор:
import pandas as pd
import numpy as np
x = pd.DataFrame()
x['s1'] = [False, False, True, False, False, True, False]
x['s2'] = [False, True, True, True, True, False, False]
x['start'] = (x['s1'] & x['s2']).replace(False, np.nan)
x['end'] = (~ (x['s2'].shift() & (~ x['s2']))).replace(True, np.nan)
x['result'] = x['start'].fillna(x['end']).fillna(method='ffill').fillna(0) > 0
x
Несмотря на то, что мое решение работает, у меня создалось впечатление, что я слишком много понимаю, чтобы достичь этого !?
Любые предложения?
Это выглядит хорошо для меня. FWIW, несколько более компактный способ сделать первые 2 строки: 'x.loc [x.s1 | ~ x.s2, 's3'] = x.s2' – JohnE