Pandas:按键分组获取第一次出现的数据
Pandas:按键分组获取第一次出现的数据
如果我有以下的数据框:
| 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
。
我搜索了一些可能的解决方案,但无法弄清楚如何正确地实现它们。可能应该像这样写:
df.groupby(["id", "id2"])["timestamp"].apply(lambda x: ....)
Pandas: 通过键进行分组,获取第一次出现的结果
在上述代码中,我们可以看到出现了一个问题:如何通过键进行分组,并获取每组中的第一次出现的结果。具体而言,我们有一个数据框df,其中包含id、timestamp、code和id2四个列。我们的目标是根据id和id2两列进行分组,并获取每组中的第一次出现的结果。
为了解决这个问题,我们可以采取以下步骤:
1. 创建一个新列newcol,将id和id2两列的字符串合并起来。代码如下:
df['newcol'] = df.apply(lambda x: str(x.id) + str(x.id2), axis=1)
2. 根据新列newcol去除重复的行。代码如下:
df = df[~df.newcol.duplicated()].iloc[:,:4]
这里使用了duplicated()函数来判断每一行是否是重复的,然后使用~符号取反来获取非重复的行。最后使用iloc函数来选择前四列,并将结果重新赋值给df。
3. 打印结果。代码如下:
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
问题的原因是需要在Pandas中根据键获取第一个出现的值。解决方法有两种:使用GroupBy.first函数或使用drop_duplicates函数。
在Pandas中,可以使用GroupBy.first函数来获取第一个出现的值。具体代码如下:
df.groupby(["id", "id2"])["timestamp"].first()
另一种解决方法是使用drop_duplicates函数。具体代码如下:
df.drop_duplicates(subset=['id','id2'])
这两种方法可以得到相同的输出结果。下面是使用GroupBy.first函数的输出结果:
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
下面是使用drop_duplicates函数的输出结果:
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
通过使用这两种方法,可以根据键获取到第一个出现的值。