Tôi có hai chuỗi dữ liệu bool, mà tôi muốn kết hợp với đối tượng chuỗi mới, nhưng logic kết hợp phụ thuộc vào "lịch sử" (giá trị trước đó).Kết hợp hai chuỗi gấu trúc với thay đổi logic
Series1 chứa hầu hết các giá trị False, nhưng là True. Series2 thường chứa các giá trị True hoặc False - xác suất của các giá trị lặp lại là khá cao.
Trong chuỗi kết quả, tôi cần các khoảng thời gian của giá trị bool bắt đầu bằng một phần Đúng bất cứ khi nào cả hai đều đúng và kết thúc khi phần trong Series2 kết thúc, i. e. không còn chứa True nữa.
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
Trong dòng 2 kết quả chuyển sang True và ở trên, cho đến khi True-pha trong Series2 kết thúc vào hàng 5.
Đây là những gì tôi đã đưa ra cho đến nay:
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
Mặc dù giải pháp của tôi hoạt động, tôi có ấn tượng rằng tôi đang nghĩ quá khó để đạt được điều này !?
Mọi đề xuất?
Điều này có vẻ tốt với tôi. FWIW, một cách nhỏ gọn hơn để thực hiện 2 dòng đầu tiên là: 'x.loc [x.s1 | ~ x.s2, 's3'] = x.s2' – JohnE