我一直在努力尝试对数据集进行分类;也许有人可以帮助我或指出正确的方向。
我有一个数据帧,其中一堆事件一个接一个地发生,并且在某个随机点,一个事件在一个列中注册。它看起来像这样:
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”事件的记录。
答案 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
另一种选择:
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