5
我有两个系列的bool数据,我想合并成一个新的系列对象,但组合逻辑依赖于“历史”(以前的值)。将两个熊猫系列与变化的逻辑相结合
Series1包含大多数False,但单个True值。 Series2通常包含True或False值的周期 - 重复值的概率非常高。
在结果序列中,我需要布尔值的时间段,以True部分开始,每当两个部分都为True时结束,当Series2部分结束时结束。即不再包含True。
e。 G。
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行的结果切换到真和岿然不动,直到真相系列2在行结束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,做前两行稍微更紧凑的方法是:'x.loc [x.s1 | 〜x.s2,'s3'] = x.s2' – JohnE