2017-09-01 3 views
1

Meine Daten sieht so aus.Wie groupeby und Zeichenfolge in Python einfügen

ID    Position   Treatment 
--20AxECvv-   0   A 
--20AxECvv-   -1   C 
--20AxECvv-   -2   B 
--h9INKewQf-  0   A 
--h9INKewQf-  -1   B 
[email protected]   0   C 
QUeSNEXmdB   0   C 
QUeSNEXmdB   -1   A 
[email protected]   0   C 

Frage 1:

ich alle die Behandlung durch einen Benutzer hat haben wollen (id) entsprechend seiner Position und durch einen getrennten '-'.

Das Ergebnis wäre:

ID      Treatment 

--20AxECvv-    B-C-A 
--h9INKewQf-    B-A 
[email protected]    C 
QUeSNEXmdB    A-C 
[email protected]    C 

Frage 2

Und nach all dem Behandlungsweg zu wissen, ich will, wie oft tratment C (Placebo) ist mit A und B zählen

Outcome : 
treatment (placebo)   other treatment   times 
C       A       2 
C       B       1 

Und wie viele Zeit, die Menschen es nehmen in den letzten (wenn Patienten andere genommen hat)

Outcome : 
treatment placebo in last   other treatment   times 
C       A        1 
C       B        0 

Vielen Dank im Voraus einige Zeit, um diese Fragen zu nehmen :)

+1

Sie Pandas verwenden? Es ist kein Tag, also ist es unklar. – Jarad

+0

Ja, tut mir leid, ich werde das Tag bearbeiten –

Antwort

2

Sie wollen GROUPBY und Summe denke ich

>>> y = pandas.DataFrame(columns=["x", "treatment"], data=[[0,"a"],[1,"b"],[0,"c"]]) 
>>> y 
    x treatment 
0 0   a 
1 1   b 
2 0   c 

>>> y.groupby("x").sum() 
    treatment 
x   
0  ac 
1   b 

Sum Strings seit "a" + "b" concat wird = " ab“in python

Wenn Sie die Behandlungen, die von einem String getrennt benötigen versuchen

>>> y.groupby("x")["treatment"].apply("-".join) 
x 
0 a-c 
1  b 
+0

Aber es war eine vereinfachte Daten, es gibt viele verschiedene Behandlung .... –

+0

Ok Ich habe meine Antwort zu einem Weg, um die Behandlungen getrennt durch eine Zeichenfolge enthalten bearbeitet. Haben Sie danach gesucht? –

+0

Ich habe dies als Fehler: TypeError: Sequenz-Element 0: erwartete str-Instanz, Float gefunden –

0

Die Lösung für Ihre Frage 1:

import pandas as pd 

df = pd.read_table('yourfile', header=None, delim_whitespace=True, skiprows=1) 
df.columns = ['ID','Position','Treatment'] 
grouped = df.sort_values('Position').groupby('ID') 
grouped = grouped.agg(lambda x: '-'.join(x)).reset_index() 

print(grouped) 

Der Ausgang:

   ID Treatment 
0 --20AxECvv-  B-C-A 
1 --h9INKewQf-  B-A 
2 QUeSNEXmdB  A-C 
3 [email protected]   C 
4  [email protected]   C 
+0

Hallo, wenn ich dies tue, ist das Ergebnis für jede Zeile, dass die Spaltenposition und die Position enthalten: "id - posiiton - treatment" " –

+0

@AnnaCarrere, was meinst du? Ich habe Ihre Eingabe in eine Datei kopiert, meine Vorgehensweise angewendet und das erwartete Ergebnis erhalten. – RomanPerekhrest

+0

Ich schreibe genau, was Sie schreiben, außer der ersten Zeile (df = pd.read_table ('yourfile', header = None, delim_whitespace = True, skiprows) = 1) weil ich meine Tabelle bereits aus früheren Codeausführungen habe –

Verwandte Themen