2016-10-21 26 views
5

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?

Trả lời

1

tiên, chúng ta biết chắc chắn rằng result luôn là False khi s2 là False, và luôn luôn Đúng khi cả hai s1s2 là True. Điều đó không phụ thuộc vào giá trị theo thời gian:

x.loc[~x['s2'], 'result'] = False 
x.loc[x['s1'] & x['s2'], 'result'] = True 

Sau đó chúng ta điền NA với "mong lấp đầy":

x['result'].fillna(method = 'ffill', inplace = True) 

Và trong trường hợp có một số còn lại của NA vào đầu cột, chúng tôi thay thế chúng với False:

x['result'].fillna(False, inplace = True) 
+0

Đ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

Các vấn đề liên quan