2016-09-21 7 views
0

Ich habe DatenrahmenPandas: schreiben Zustand in Datenrahmen filtern

member_id,event_time,event_path,event_duration 
19440,"2016-08-09 08:26:48",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,0 
19440,"2016-08-09 08:27:04",ebesucher.ru/surfbar/Ochotona,25 
19440,"2016-08-09 08:27:53",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,0 
19440,"2016-08-09 08:27:53",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,2 
19441,"2016-08-09 08:27:55",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#password,1 
19441,"2016-08-09 08:27:58",neobux.com/m/l/,0 
19441,"2016-08-09 08:27:59",neobux.com/m/l/,0 
19441,"2016-08-09 08:28:01",http://new.enjoysurvey.com/ru/survey/649/index/m_e48f6e46bf0d222e2be70bc9067730c423423,11 
19441,"2016-08-09 08:28:12",echo.msk.ru ,1 
19441,"2016-08-09 08:28:15",neobux.com/m/l/?vl=A206591715C607425417A51CDE023499,2 

Ich brauche neue Spalte mit visiting zu erstellen, und wenn new.enjoysurvey.com/ru/survey/649/index/m_e48f6e46bf0d222e2be70bc9067730c4 enthalten in event_path und neben event_path enthalten ['echo.msk.ru', 'edimdoma.ru', 'glaz.tv', 'vesti.ru'], als visiting == 1, sonst - 2. Wenn es member_id zu vervollständigen, gibt den Besuch member_id = 1 Wunsch Ausgang

member_id,event_time,event_path,event_duration, visiting 
19440,"2016-08-09 08:26:48",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,0,2 
19440,"2016-08-09 08:27:04",n,25,2 
19440,"2016-08-09 08:27:53",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,0,2 
19440,"2016-08-09 08:27:53",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#identifier,2,2 
19441,"2016-08-09 08:27:55",accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#password,1,1 
19441,"2016-08-09 08:27:58",neobux.com/m/l/,0,1 
19441,"2016-08-09 08:27:59",neobux.com/m/l/,0,1 
19441,"2016-08-09 08:28:01",http://new.enjoysurvey.com/ru/survey/649/index/m_e48f6e46bf0d222e2be70bc9067730c423423,11,1 
19441,"2016-08-09 08:28:12",echo.msk.ru ,1,1 
19441,"2016-08-09 08:28:15",neobux.com/m/l/?vl=A206591715C607425417A51CDE023499,2,1 

Ich versuche

df['visiting'] = df.groupby("member_id").event_path.transform(lambda g: (g.isin(["new.enjoysurvey.com/ru/survey/649/index/m_e48f6e46bf0d222e2be70bc9067730c4", 'echo.msk.ru', 'edimdoma.ru', 'glaz.tv', 'vesti.ru']).sum() > 1).astype(int)).replace(0, 2) 

Aber es nur eine Größe von Quantität event_path, bestimmt aber ich brauche die Sequenz zu berücksichtigen. Aber ich weiß nicht, wie ich das machen soll.

+0

Nächste 'event_path'? Meinst du nächste Reihe? Auch das ergibt keinen Sinn: * Wenn es zu member_id vervollständigt wird, gib member_id vising = 1 * an. – Parfait

+0

@Parfait Ich meine, wenn 'event_path' in der nächsten Zeichenfolge –

Antwort

1

Betrachten Sie eine , die eine Schleife durch event_path Strings verwendet. Mit Schleife können Sie benachbarte Elemente von Listenindex suchen:

def findevent(row): 
    event_paths = row['event_path'].tolist()  
    row['visiting'] = 2 

    for i in range(len(event_paths)): 
     if 'new.enjoysurvey.com/ru/survey/649/index/m_e48f6e46bf0d222e2be70bc9067730c423423' in event_paths[i] and \ 
          event_paths[i+1] in ['echo.msk.ru', 'edimdoma.ru', 'glaz.tv', 'vesti.ru']: 
      row['visiting'] = 1 
      break    
    return(row) 

df = df.groupby(['member_id']).apply(findevent) 
print(df) 

# member_id   event_time           event_path event_duration visiting 
# 0  19440 2016-08-09 08:26:48 accounts.google.com/ServiceLogin?service=mail&...    0   2 
# 1  19440 2016-08-09 08:27:04      ebesucher.ru/surfbar/Ochotona    25   2 
# 2  19440 2016-08-09 08:27:53 accounts.google.com/ServiceLogin?service=mail&...    0   2 
# 3  19440 2016-08-09 08:27:53 accounts.google.com/ServiceLogin?service=mail&...    2   2 
# 4  19441 2016-08-09 08:27:55 accounts.google.com/ServiceLogin?service=mail&...    1   1 
# 5  19441 2016-08-09 08:27:58         neobux.com/m/l/    0   1 
# 6  19441 2016-08-09 08:27:59         neobux.com/m/l/    0   1 
# 7  19441 2016-08-09 08:28:01 http://new.enjoysurvey.com/ru/survey/649/index...    11   1 
# 8  19441 2016-08-09 08:28:12          echo.msk.ru    1   1 
# 9  19441 2016-08-09 08:28:15 neobux.com/m/l/?vl=A206591715C607425417A51CDE0...    2   1 

** HINWEIS: Ihre erste URL Suche wird new.enjoysurvey.com/... nicht in Ihren gebuchten Daten enthalten ist. Oben ändert sich diese URL zu Element in Daten für Codedemonstration.

Verwandte Themen