2017-07-12 4 views
4

Wenn ich Datenrahmen folgendenPandas: das erste Auftreten von Tasten Gruppierung

| id | timestamp   | code | id2 
| 10 | 2017-07-12 13:37:00 | 206 | a1 
| 10 | 2017-07-12 13:40:00 | 206 | a1 
| 10 | 2017-07-12 13:55:00 | 206 | a1 
| 10 | 2017-07-12 19:00:00 | 206 | a2 
| 11 | 2017-07-12 13:37:00 | 206 | a1 
... 

ich zum Gruppieren von id, id2 Spalten und das erste Vorkommen von timestamp Wert erhalten, z.B. für id=10, id2=a1, timestamp=2017-07-12 13:37:00.

Ich googelte es und fand einige mögliche Lösungen, aber kann nicht herausfinden, wie man sie richtig realisiert. Dies sollte wohl so etwas wie:

df.groupby(["id", "id2"])["timestamp"].apply(lambda x: ....) 

Antwort

5

Ich glaube, Sie brauchen GroupBy.first:

df.groupby(["id", "id2"])["timestamp"].first() 

Oder drop_duplicates:

df.drop_duplicates(subset=['id','id2']) 

Für gleiche Leistung:

df1 = df.groupby(["id", "id2"], as_index=False)["timestamp"].first() 
print (df1) 
    id id2   timestamp 
0 10 a1 2017-07-12 13:37:00 
1 10 a2 2017-07-12 19:00:00 
2 11 a1 2017-07-12 13:37:00 

df1 = df.drop_duplicates(subset=['id','id2'])[['id','id2','timestamp']] 
print (df1) 
    id id2   timestamp 
0 10 a1 2017-07-12 13:37:00 
1 10 a2 2017-07-12 19:00:00 
2 11 a1 2017-07-12 13:37:00 
0

Man kann erstellen e eine neue Spalte nach Strings id und id2 Verschmelzung, dann Zeilen entfernen, wo es dupliziert:

df['newcol'] = df.apply(lambda x: str(x.id) + str(x.id2), axis=1) 
df = df[~df.newcol.duplicated()].iloc[:,:4] # iloc used to remove new column. 
print(df) 

Ausgang:

id    timestamp code id2 
0 10 2017-07-12 13:37:00 206 a1 
3 10 2017-07-12 19:00:00 206 a2 
4 11 2017-07-12 13:37:00 206 a1 
Verwandte Themen