Python 连续相似字符串的计数
我有一个数据框:Python 连续相似字符串的计数,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框: Id Seqno. Event 1 2 A 1 3 B 1 5 A 1 6 A 1 7 A 1 8 B 1 9 C 1 10 D 我想根据“事件A连续发生”的时间过滤数据帧。例如,如果我尝试 事件A>2它应返回所有ID作为 Id Event count 1 A 3
Id Seqno. Event
1 2 A
1 3 B
1 5 A
1 6 A
1 7 A
1 8 B
1 9 C
1 10 D
我想根据“事件A连续发生”的时间过滤数据帧。例如,如果我尝试
事件A>2它应返回所有ID作为
Id Event count
1 A 3
到目前为止我已经试过了
df['new'] = df['Event'].shift()+ df['Event']
a= df[df['new']=='AA']
a[a['Id'].isin(a['Id'].value_counts()[a['Id'].value_counts()>2].index)]
但它似乎不起作用 一个不使用pandas内部构件的函数(可以说这是一种更好的方法):
不使用pandas内部结构的函数(可以说这是一种更好的方法):
这个问题可以分为两部分。首先,您需要根据
Id
和事件系列中的连续元素进行分组。这可以使用shift
+cumsum
m = df.Event.ne(df.Event.shift()).cumsum()
df['count'] = df.groupby(['Id', m])['Event'].transform('size')
print(df)
这为我们提供了一个系列,它标识了事件
列中的顺序运行,但现在我们希望简化查找。我们可以删除重复项
,这样每个条件只返回每个Id/Event/count
的一次运行,然后使用布尔索引:
f = df[['Id', 'Event', 'count']].drop_duplicates()
f.loc[f.Event.eq('A') & f['count'].gt(2)]
这个问题可以分为两部分。首先,您需要根据Id
和事件系列中的连续元素进行分组。这可以使用shift
+cumsum
m = df.Event.ne(df.Event.shift()).cumsum()
df['count'] = df.groupby(['Id', m])['Event'].transform('size')
print(df)
这为我们提供了一个系列,它标识了事件
列中的顺序运行,但现在我们希望简化查找。我们可以删除重复项
,这样每个条件只返回每个Id/Event/count
的一次运行,然后使用布尔索引:
f = df[['Id', 'Event', 'count']].drop_duplicates()
f.loc[f.Event.eq('A') & f['count'].gt(2)]
请看数值\u counts所需的输出是多少?@W-B谢谢!我只对连续的事件感兴趣,我不认为价值计算会有帮助。我已经厌倦了这样做。有趣的是,我不知道你会如何计算连续的观察结果。好奇的是,如果有一个观察值的话,你会看到答案。看看期望的输出是什么?@W-B谢谢!我只对连续的事件感兴趣,我不认为价值计算会有帮助。我已经厌倦了这样做。有趣的是,我不确定你会如何计算连续的观察结果,好奇地想知道答案是否存在。这显然不是你想要的结果,正如你在上面所看到的:P@RockyLi仍然不正确。这是一个连续出现的问题。这显然不是所需的输出OP,正如您在上面看到的:P@RockyLi仍然不正确。这是一个连续出现的问题。
Id Event count
2 1 A 3