按随机事件对数据帧进行分组,并使用组计数设置新列

时间:2017-01-16 22:48:06

标签: python pandas

我一直在努力尝试对数据集进行分类;也许有人可以帮助我或指出正确的方向。

我有一个数据帧,其中一堆事件一个接一个地发生,并且在某个随机点,一个事件在一个列中注册。它看起来像这样:

       Timestamp         Event
0  10/26/2015 22:50:15     0
1  10/26/2015 22:50:46     0
2  10/26/2015 22:50:50     0
3  10/26/2015 22:50:51     0
4  10/26/2015 22:51:15     1
5  10/26/2015 22:51:47     0
6  10/26/2015 22:52:38     0
7  10/26/2015 22:54:46     1
8  10/26/2015 22:55:46     0

我需要创建一个新列,用于标识每次出现或事件“1”之前发生的每组记录。并在该组中设置一个计数器。结果应该是这样的:

       Timestamp         Event   Group
0  10/26/2015 22:50:15     0     1
1  10/26/2015 22:50:46     0     1
2  10/26/2015 22:50:50     0     1
3  10/26/2015 22:50:51     0     1
4  10/26/2015 22:51:15     1     1
5  10/26/2015 22:51:47     0     2
6  10/26/2015 22:52:38     0     2
7  10/26/2015 22:54:46     1     2

请注意,结果中会忽略现在导致“1”事件的记录。

2 个答案:

答案 0 :(得分:3)

您可以在cumsum()列上使用Event,只要遇到1,就会提供新的组ID。结合shift(),您可以按预期创建Group列:

df['Group'] = df.Event.shift().cumsum().fillna(0) + 1

df.loc[df.index <= df.Event.iloc[::-1].idxmax()]   
# to filter trailing zero records 

enter image description here

另一种选择:

g = df.Event.iloc[::-1].cumsum()
df.loc[g != 0, 'Group'] = g.max() - g + 1
df.dropna()

答案 1 :(得分:0)

df['Group'] = df.cumsum().drop_duplicates()
df['Group'] = df['Group'].fillna(method='bfill').astype(int)
df['Group'][0] = 1