如果我有以下数据框
| 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
...
我需要按id, id2
列进行分组,并获得第一次出现的timestamp
值,例如id=10, id2=a1, timestamp=2017-07-12 13:37:00
。
我用Google搜索并找到了一些可能的解决方案,但无法弄清楚如何正确实现它们。这可能应该是这样的:
df.groupby(["id", "id2"])["timestamp"].apply(lambda x: ....)
答案 0 :(得分:6)
我认为你需要GroupBy.first
:
df.groupby(["id", "id2"])["timestamp"].first()
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
答案 1 :(得分:0)
可以在合并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