小黑斑羚

2024-05-29 11:39:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个黑斑羚表,我想用Ibis查询。该表如下所示:

   id  | timestamp
-------------------
 A     | 5
 A     | 7
 A     | 3
 B     | 9
 B     | 5

我想根据id和{}的唯一组合来group_by这个表。分组操作最终应该生成一个grouped对象,然后我可以对其应用聚合。例如:

组1条件:id == A; 4 < timestamp < 11
组2条件:id == A; 1 < timestamp < 6
组3条件:id == B; 4 < timestamp < 7

生成具有以下组的grouped对象:

第1组:

^{pr2}$

第二组:

   id  | timestamp
-------------------
 A     | 5
 A     | 3

第3组:

   id  | timestamp
-------------------
 B     | 5

一旦我有了组,我将执行各种聚合以获得最终结果。如果有人能帮我算出这群熊猫,我将不胜感激,即使是一个正常的熊猫表情也会很有帮助!在


Tags: 对象idbygroup条件timestamp表情ibis
1条回答
网友
1楼 · 发布于 2024-05-29 11:39:01

下面是groupby(无下划线)的示例:

df = pd.DataFrame({"id":["a","b","a","b","c","c"], "timestamp":[1,2,3,4,5,6]})

为您的timestamp创建一个grouper列。在

^{pr2}$

也可以同时使用:

df["something that I need"] = df["my interval"] & (df["id"] == "b")
df.groupby(["something that I need"]).agg("count")["dummy"]

您可能还需要应用整数除法来生成时间间隔:

df = pd.DataFrame({"id":["a","b","a","b","c","c"], "timestamp":[1,2,13,14,25,26], "sales": [0,4,2,3,6,7]})
epoch = 10
df["my interval"] = epoch* (df["timestamp"] // epoch)
df.groupby(["my interval"]).agg(sum)["sales"]

编辑:

你的例子:

import pandas as pd
A = "A"
B = "B"
df = pd.DataFrame({"id":[A,A,A,B,B], "timestamp":[5,7,3,9,5]})
df["dummy"] = 1

解决方案:

grouper = (df["id"] == A) & (4 < df["timestamp"] ) & ( df["timestamp"] < 11)
df.groupby( grouper ).agg(sum)["dummy"]

或更好:

df[grouper]["dummy"].sum()

相关问题 更多 >

    热门问题