Python 黑斑羚朱鹭组

Python 黑斑羚朱鹭组,python,pandas,group-by,cloudera,impala,Python,Pandas,Group By,Cloudera,Impala,我有一个黑斑羚表,我想用Ibis查询。该表如下所示: id | timestamp ------------------- A | 5 A | 7 A | 3 B | 9 B | 5 我想根据id和时间戳范围的唯一组合,在此表中对_进行分组。分组操作最终应该生成一个分组对象,然后我可以对其应用聚合。例如: import pandas as pd A = "A" B = "B" df = pd.DataFrame({"id":[A,A,A

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

   id  | timestamp
-------------------
 A     | 5
 A     | 7
 A     | 3
 B     | 9
 B     | 5
我想根据id和时间戳范围的唯一组合,在此表中对_进行分组。分组操作最终应该生成一个分组对象,然后我可以对其应用聚合。例如:

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
group1条件:id==A;4<时间戳<11 group2条件:id==A;1<时间戳<6 组3条件:id==B;4<时间戳<7

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

第一组:

   id  | timestamp
-------------------
 A     | 5
 A     | 7
第2组:

   id  | timestamp
-------------------
 A     | 5
 A     | 3
第3组:

   id  | timestamp
-------------------
 B     | 5
一旦我有了这些组,我将执行各种聚合以获得最终结果。如果有人能帮我找出这个组,我将不胜感激,即使是一个正则表达式也会很有帮助

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

df = pd.DataFrame({"id":["a","b","a","b","c","c"], "timestamp":[1,2,3,4,5,6]})
为时间戳创建一个grouper列

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

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"]

嗨,迪玛,谢谢你的回答。我面临的挑战是创建多个,有时重叠的时间容器,它们只适用于特定ID。如果你试着从我的例子中产生这些组,你就会明白我的意思。作为旁注,pandas有一个方便快捷的函数,用于根据称为pd.cut的装箱值进行分组。如果间隔重叠,则需要执行多个groupby操作,或者更有效地使用逻辑索引。正如我提到的,问题是要用一个groupby生成所有组。再一次,试着去解决完整的例子,你会很感激这个挑战。想想萨洛蒙国王把一个婴儿组织成一个母亲,你会意识到挑战是根本的。如果要将有限集拆分为有限数量的子集,则不能在多个groupsGroupby操作标签中包含初始子集的一个元素,即为每个元素指定一个标签,将其映射到子集。不能有两个标签将一个元素映射到多个子集。
grouper = (df["id"] == A) & (4 < df["timestamp"] ) & ( df["timestamp"] < 11)
df.groupby( grouper ).agg(sum)["dummy"]
df[grouper]["dummy"].sum()