gpt4 book ai didi

python - 如何根据 pandas DataFrame 中的长度过滤 session

转载 作者:行者123 更新时间:2023-12-01 08:35:39 24 4
gpt4 key购买 nike

我在 pandas 中有以下 DataFrame,它由约 3500 万行组成,平均序列长度约为 22:

session     id               servertime
1 3085 2018-10-09 13:20:25.096
1 3671 2018-10-21 08:19:39.078
1 2015 2018-10-23 21:22:27.647
7 4066 2018-10-29 00:04:16.707
7 4991 2018-10-30 11:00:57.918
7 4495 2018-10-31 04:50:56.864
7 5131 2018-11-04 10:49:03.044
7 4982 2018-11-04 12:02:03.738
7 4495 2018-11-04 12:43:53.595
7 3906 2018-11-05 16:55:17.891
7 8743 2018-11-06 16:55:17.891
7 6541 2018-11-07 16:55:17.891
7 3447 2018-11-08 16:55:17.891
7 6541 2018-11-08 18:55:17.891
7 1234 2018-11-09 16:55:17.891
20 10256 2018-08-28 11:09:35.902
20 11220 2018-09-09 06:49:48.44
20 5237 2018-09-13 12:01:09.677
20 5547 2018-09-13 12:02:34.762
20 6454 2018-09-13 12:07:40.061

当序列的长度超过 10 时,我想从序列中过滤掉“最旧”的值。意思是,在上面的DataFrame中,序列7的长度是12。因此,我想过滤掉该序列中的前两行。

因此,预期输出应如下所示:

session     id               servertime
1 3085 2018-10-09 13:20:25.096
1 3671 2018-10-21 08:19:39.078
1 2015 2018-10-23 21:22:27.647
7 4495 2018-10-31 04:50:56.864
7 5131 2018-11-04 10:49:03.044
7 4982 2018-11-04 12:02:03.738
7 4495 2018-11-04 12:43:53.595
7 3906 2018-11-05 16:55:17.891
7 8743 2018-11-06 16:55:17.891
7 6541 2018-11-07 16:55:17.891
7 3447 2018-11-08 16:55:17.891
7 6541 2018-11-08 18:55:17.891
7 1234 2018-11-09 16:55:17.891
20 10256 2018-08-28 11:09:35.902
20 11220 2018-09-09 06:49:48.44
20 5237 2018-09-13 12:01:09.677
20 5547 2018-09-13 12:02:34.762
20 6454 2018-09-13 12:07:40.061

如何以最有效的方式做到这一点?

先谢谢你了。

/马蒂亚斯

最佳答案

使用sort_values按两列,然后使用 GroupBy.tail :

df['servertime'] = pd.to_datetime(df['servertime'])

df1 = (df.sort_values(['session','servertime'])
.groupby('session', sort=False)
.tail(10))
print (df1)
session id servertime
0 1 3085 2018-10-09 13:20:25.096
1 1 3671 2018-10-21 08:19:39.078
2 1 2015 2018-10-23 21:22:27.647
5 7 4495 2018-10-31 04:50:56.864
6 7 5131 2018-11-04 10:49:03.044
7 7 4982 2018-11-04 12:02:03.738
8 7 4495 2018-11-04 12:43:53.595
9 7 3906 2018-11-05 16:55:17.891
10 7 8743 2018-11-06 16:55:17.891
11 7 6541 2018-11-07 16:55:17.891
12 7 3447 2018-11-08 16:55:17.891
13 7 6541 2018-11-08 18:55:17.891
14 7 1234 2018-11-09 16:55:17.891
15 20 10256 2018-08-28 11:09:35.902
16 20 11220 2018-09-09 06:49:48.440
17 20 5237 2018-09-13 12:01:09.677
18 20 5547 2018-09-13 12:02:34.762
19 20 6454 2018-09-13 12:07:40.061

关于python - 如何根据 pandas DataFrame 中的长度过滤 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53738527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com