Pandas:按键分组获取第一次出现的数据

9 浏览
0 Comments

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

...

我需要按照idid2列进行分组,并获取timestamp值的第一次出现,例如id=10, id2=a1, timestamp=2017-07-12 13:37:00

我搜索了一些可能的解决方案,但无法弄清楚如何正确地实现它们。可能应该像这样写:

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

0
0 Comments

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

0
0 Comments

问题的原因是需要在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

通过使用这两种方法,可以根据键获取到第一个出现的值。

0