2017-07-12 27 views
4

分組如果我有以下數據幀熊貓:拿到第一次出現由鍵

| 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 
... 

我需要GROUP BY id, id2列,並得到timestamp值,例如第一次出現爲id=10, id2=a1, timestamp=2017-07-12 13:37:00

我用它搜索了一下,發現了一些可能的解決方案,但無法弄清楚如何正確實現它們。這大概應該是這樣的:

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

回答

5

我想你需要GroupBy.first

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

或者drop_duplicates

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

對於相同的輸出:

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

一個CAN科瑞Ë合併ID和ID2後弦新列,然後刪除它被複制行:

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) 

輸出:

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