pandas 为连续事件组创建顺序事件ID

taor4pac  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(132)

我有这样一个df:

Period  Count
1       1
2       0
3       1
4       1
5       0
6       0
7       1
8       1
9       1
10      0

如果Count中有两个或更多连续出现的1,我想在新列中返回一个“事件ID”,如果没有,则返回0。因此,在新列中,基于Count列中满足的条件,每行将获得1。我想要的输出将是:

Period  Count  Event_ID
1       1      0
2       0      0
3       1      1
4       1      1
5       0      0
6       0      0
7       1      2
8       1      2
9       1      2
10      0      0

我已经研究并找到了允许我标记出连续的一组相似数字(如1)的解决方案,但我还没有遇到我需要的。我希望能够使用这种方法来计数任何数量的连续出现,而不仅仅是2。例如,有时我需要计数10个连续出现,我只是在这里的例子中使用2。

kzmpq1sx

kzmpq1sx1#

这将完成工作:

ones = df.groupby('Count').groups[1].tolist()
# creates a list of the indices with a '1': [0, 2, 3, 6, 7, 8]
event_id = [0] * len(df.index)
# creates a list of length 10 for Event_ID with all '0'

# find consecutive numbers in the list of ones (yields [2,3] and [6,7,8]):
for k, g in itertools.groupby(enumerate(ones), lambda ix : ix[0] - ix[1]):
  sublist = list(map(operator.itemgetter(1), g))
  if len(sublist) > 1:
    for i in sublist:
      event_id[i] = len(sublist)-1    
# event_id is now [0, 0, 1, 1, 0, 0, 2, 2, 2, 0]   

df['Event_ID'] = event_id

for循环改编自this example(使用itertools,也可以使用其他方法)。

4xrmg8kj

4xrmg8kj2#

col1=(df1['Count'].diff().ne(0)&df1['Count'].ne(1)).cumsum().mul(df1.Count)
df1.assign(flag=col1)

输出:

Period  Count  flag
0       1      1   0.0
1       2      0   0.0
2       3      1   1.0
3       4      1   1.0
4       5      0   0.0
5       6      0   0.0
6       7      1   2.0
7       8      1   2.0
8       9      1   2.0
9      10      0   0.0

相关问题