我有一个熊猫数据框,我想在其中统计一列中特定字符串连续出现的次数。
假设我有以下数据框。
col1
0 string1
1 string1
2 string1
3 string2
4 string3
5 string3
6 string1
我想将a
定义为string1
或col1
中任何其他字符串的最大连续出现次数。
在这种情况下,如果我想搜索a
并为3
返回string1
,2
应该返回string3
。
如何实现?
答案 0 :(得分: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_values
+ drop_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 :(得分:2)
仅itertools
groupby
,此处的顺序与原始df相同
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