2017-04-26 4 views
2

Ich habe einen DataFrame von Patienteninformationen, die von Patient/Besuch eingegeben wird. Ich möchte alle Patienten-/Besuchsdaten für Patienten mit nur einem Besuch auswählen. Im Allgemeinen möchte ich Daten basierend auf jedem gruppierten und aggregierten Wert dieser Daten auswählen können.Wählen Sie Zeilen aus Dataframe basierend auf aggregierten Wert

Mein aktueller Weg ist es zu verschmelzen, aber das ist ziemlich umständlich.

dfg = dfmn.groupby(['pt_studyid']).size().to_frame("count").reset_index() 
dfgu = dfg[dfg['count']>1] 
dfmn_filt = dfgu.merge(dfmn, on=['pt_studyid']).drop('count', 1) 

Gibt es einen saubereren Weg?

+2

Können Sie df.head() posten? – Vaishali

+0

Fühlen Sie sich frei, auch zu erhöhen. Vielen Dank – piRSquared

Antwort

0

Über die filter Methode des Objekts DataFrameGroupBy

dfmn.groupby('pt_studyid').filter(lambda x: len(x) > 1) 

Beispiel

dfmn = pd.DataFrame(dict(pt_studyid=list('AAAABBBCDEFFF'), val=range(13))) 
dfmn 

    pt_studyid val 
0   A 0 
1   A 1 
2   A 2 
3   A 3 
4   B 4 
5   B 5 
6   B 6 
7   C 7 
8   D 8 
9   E 9 
10   F 10 
11   F 11 
12   F 12 

Filter

print(dfmn.groupby('pt_studyid').filter(lambda x: len(x) > 1)) 

    pt_studyid val 
0   A 0 
1   A 1 
2   A 2 
3   A 3 
4   B 4 
5   B 5 
6   B 6 
10   F 10 
11   F 11 
12   F 12 
Verwandte Themen