我有一个导入到熊猫的日志,如下所示:
data = [['A',1,0,'a'],
['A',1,1,'b'],
['B',1,0,'c'],
['B',2,0,'b'],
['B',2,1,'a'],
['B',2,2,'b'],
['B',2,3,'b'],
['B',2,4,'a'],
['D',1,0,'d'],
['D',2,0,'d'],
['D',3,0,'a']]
df = pd.DataFrame(data, columns=['Id', 'Session', 'Time', 'Event'])
df
给出:
Id Session Time Event
0 A 1 0 a
1 A 1 1 b
2 B 1 0 c
3 B 2 0 b
4 B 2 1 a
5 B 2 2 b
6 B 2 3 b
7 B 2 4 a
8 D 1 0 d
9 D 2 0 d
10 D 3 0 a
如您所见,每个Id
可以有多个Session
,分别由Time
和Event
描述。我正在尝试获取给定a
和Id
导致事件Session
的累积事件。使用此示例,我想获得类似以下的输出:
Id Session Time Event Series_by_a
0 A 1 0 a 1
1 B 2 0 b 2
2 B 2 1 a 2
3 B 2 0 b 3
4 B 2 1 a 3
5 B 2 2 b 3
6 B 2 3 b 3
7 B 2 4 a 3
8 D 3 0 a 4
如您所见,从原始的DataFrame中,我们丢弃了第1行(Event
b
发生在a
之后),第2行(Session
1来自{{1} } B没有Id
Event
),并且第8和9行(想法相同)。但是,我们发现在a
B的Session
2中,Id
Event
发生了两次,因此新的DataFrame捕获了直到发生a
指向并标记它们(在Event
列中)。
显而易见的答案是迭代地执行此操作,但是似乎应该有一种使用Series_by_a
或类似的矢量化机制来执行此操作的方法,但是如果是这样,我不确定从哪里开始。