gpt4 book ai didi

python - groupby 返回第 n 组 - 不是行

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:04 25 4
gpt4 key购买 nike

我试图在一长行 (>2M) 中按两个因素进行分组。

数据背景

第二个因素实际上是测试日期 - 对于给定的样本(第一组),可以重新测试样本。然而,测试可以改变样本,因此能够从第二次测试(或第三次、第四次等)中选择性地提取一批测试数据是很有用的

较早的问题和当前的代码

前段时间我问了一个问题,得到了一个函数,非常感谢 Praveen : Sorting and ranking by dates, on a group in a pandas df但这非常慢:在 1.2M 行数据集上运行,到目前为止,它在具有 96gb ram 的 JupyterHub 服务器上花费了 20 多分钟,并且仍在继续。

df1 = df.sort_values(['id', 'date'], ascending=[True, False])
df1['date_rank'] = df1.groupby(['id'])['date'].transform(lambda x: list(map(lambda y: dict(map(reversed, dict(enumerate(x.unique())).items()))[y]+1,x)) )

当前想法

我的第一个想法不是用数字标记测试日期,而是感觉这与 cumcount、groupby.nth 或 getgroup 接近可以实现 - 但我无法实现。有人有什么想法吗?下面的数据集仍然相关:

df = pd.DataFrame({
'id':[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6,6,6,7,7],
'value':[.01, .4, .5, .7, .77, .1,.2, 0.3, .11, .21, .4, .01, 3, .5, .8, .9, .1],
'date':['10/01/2017 15:45:00','10/01/2017 15:45:00','05/01/2017 15:56:00',
'11/01/2017 15:22:00','11/01/2017 15:22:00','06/01/2017 11:02:00','05/01/2017 09:37:00','05/01/2017 09:37:00','05/01/2017 09:55:00',
'05/01/2017 09:55:00','05/01/2017 10:08:00','05/01/2017 10:09:00','03/02/2017 08:55:00',
'03/02/2017 09:15:00','03/02/2017 09:31:00','09/01/2017 15:42:00',
'19/01/2017 16:34:00']})

我正在尝试生成类似 date_rank 列中的数据;虽然我很高兴不生成列,但我只想能够选择包含第二个测试日期数据的行。

enter image description here

例如:

df.groupby(['id','date'])['value'].unique()

返回:

id  date               
1 05/01/2017 15:56:00 [0.5]
10/01/2017 15:45:00 [0.01, 0.4]
2 11/01/2017 15:22:00 [0.7, 0.77]
3 05/01/2017 09:37:00 [0.2, 0.3]
06/01/2017 11:02:00 [0.1]
4 05/01/2017 09:55:00 [0.11, 0.21]
5 05/01/2017 10:08:00 [0.4]
05/01/2017 10:09:00 [0.01]
6 03/02/2017 08:55:00 [3.0]
03/02/2017 09:15:00 [0.5]
03/02/2017 09:31:00 [0.8]
7 09/01/2017 15:42:00 [0.9]
19/01/2017 16:34:00 [0.1]

我希望能够选择(例如)组的第二组可用例如:

1 - 10/01/2017 15:45:00 [0.01, 0.04]
3 - 06/01/2017 11:02:00 [0.1]
5 - 05/01/2017 10:09:00 [0.01]
6 - 03/02/2017 09:15:00 [0.5]

非常感谢任何帮助或想法。

最佳答案

您可以reset_index,然后使用GroupBy + nth :

res = df.reset_index().groupby('id').nth(1)

print(res)

date value
id
1 10/01/2017 15:45:00 [0.01, 0.4]
3 06/01/2017 11:02:00 [0.1]
5 05/01/2017 10:09:00 [0.01]
6 03/02/2017 09:15:00 [0.5]
7 19/01/2017 16:34:00 [0.1]

关于python - groupby 返回第 n 组 - 不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53066627/

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