在数据框列中,统计字符串的最大连续出现次数

4
我有一个熊猫数据框,我想要对其中一列特定字符串的连续出现次数进行计数。
假设我有以下数据框。
   col1
0  string1
1  string1
2  string1
3  string2
4  string3
5  string3
6  string1

我想把a定义为连续出现最多的字符串数量,例如在col1中搜索string1或任何其他字符串。
在这种情况下,如果我要搜索string1a应该返回3,如果我要搜索string3,则应返回2
如何实现这一点?
2个回答

3

可以使用通常的技巧来分组连续的值:

df1 = df.groupby((df.col1 != df.col1.shift()).cumsum().rename(None)).col1.agg(['size', 'first'])
#   size    first
#1     3  string1
#2     1  string2
#3     2  string3
#4     1  string1

然后使用 sort_valuesdrop_duplicates 找到最大值:
df1 = df1.sort_values('size').drop_duplicates('first', keep='last').set_index('first').rename_axis(None)
#         size
#string2     1
#string3     2
#string1     3

现在您可以轻松地查找它们:

df1.loc['string1']
#size    3
#Name: string1, dtype: int64

1
df.col1.groupby(df.col1.ne(df.col1.shift()).cumsum()).size().max() - piRSquared
@piRSquared,我只是想向您问好 :-) - BENY
谢谢。这正是我在寻找的。 - Sd Junk

2

只要使用itertools groupby,这里的顺序与原始数据框保持一致。

import itertools 
pd.DataFrame([x,len(list(y))] for x , y in itertools.groupby(df['col1']))
Out[92]: 
         0  1
0  string1  3
1  string2  1
2  string3  2
3  string1  1

pd.DataFrame([x,len(list(y))] for x , y in itertools.groupby(df['col1'])).groupby(0)[1].max()
Out[94]: 
0
string1    3
string2    1
string3    2
Name: 1, dtype: int64

嗨 _ _ _ _ _ o/ - piRSquared
@piRSquared 很高兴看到你回来 :-) - BENY
谢谢您的回答。但是它仍然返回所有字符串的连续出现,而我只需要最大数量。我理解从您的答案中,我可以像我选择为最佳答案的帖子一样执行相同的“sort_values”+“drop_duplicates”以实现相同的结果。 - Sd Junk
@SdJunk 分组聚合+最大值 - BENY
谢谢您的更新。现在它可以按照我的意图工作了。 - Sd Junk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接