Сопоставить данные с предыдущей строкой в ​​пандах на основе нескольких условий - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть панды df, как показано ниже

id      date  time  event  prod_code 
a1      201701  11   Prodpage  101538
a1      201701  11:01 basket   101538 
b1      201701  11:19  Prodpage 109
b1      201701  11:20  basket   1

Мне нужно создать новый соответствующий столбец, пожалуйста, найдите псевдокод ниже

df[matched] = if (value of id in 1st row = value of id in 2nd row, & \
              if date[1] = date[2] & event[1] = "prodpage", \
              event[2] = "basket" & prod_code[1] = prod_code[2] ,\
              "then matched" otherwise unmatched 

поэтому вывод должен быть

id      date  time  event  prod_code   matched?
a1      201701  11   Prodpage  101538   
a1      201701  11:01 basket   101538   Matched 
b1      201701  11:19  Prodpage 109
b1      201701  11:20  basket   1       Not Matched 

Как это сделать в пандах

1 Ответ

0 голосов
/ 19 ноября 2018

Разбейте свою логику на части и объедините несколько логических условий в конце.Например, если у вас всегда есть 2 значения для каждого id, и они находятся рядом:

match_cols = ['id', 'date', 'prod_code']

m1 = df[match_cols] == df[match_cols].shift()
m2 = df['event'] == 'basket'
m3 = df['event'].shift() == 'Prodpage'

df['matched?'] = np.where(m1.all(1) & m2 & m3, 'matched', 'not matched')
df.loc[::2, 'matched?'] = ''

print(df)

   id    date   time     event  prod_code     matched?
0  a1  201701     11  Prodpage     101538             
1  a1  201701  11:01    basket     101538      matched
2  b1  201701  11:19  Prodpage        109             
3  b1  201701  11:20    basket          1  not matched
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...