Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连续相似字符串的计数_Python_Pandas_Dataframe - Fatal编程技术网

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