2017-03-07 59 views
0

我有以下代码:如何包括计数的每个字符,而使用itertools.groupby删除重复项

df= pd.DataFrame(data=all_r_1.to_dataframe().groupby(['user_id'])['type'].sum()).reset_index() 

userid | type 
20  | aab 
21  | ababb 

要在type列中的字符串删除重复的,我有这样的代码:

df['type'] = df['type'].apply(lambda x: ''.join(ch for ch, _ in itertools.groupby(x))) 

其产生这样的:

userid | type 
20  | ab 
21  | abab 

这是输入DF:

id | userid | type 
1 | 20  | a 
2 | 20  | a 
3 | 20  | b 
4 | 21  | a 
5 | 21  | b 
6 | 21  | a 
7 | 21  | b 
8 | 21  | b 

但是,我想要做的是包括计数的每个字符,同时删除重复项:

userid | type 
20  | a2b 
21  | abab2 

任何想法如何,我可以修改itertools.groupby代码,还包括计数?

+0

试试这个: 'DF [ '型'] = DF [ '型']申请(拉姆达X: ''。 join(ch + len(list(group))for ch,itertools.groupby(x)))' –

+0

@Chris_Rands谢谢!我得到了这个错误'TypeError:类型'itertools._grouper'的对象没有len()' – renakre

+0

你把'len(list(group))'? (我编辑了这个到我原来的评论) –

回答

1

itertools.groupby卖场实际组,以便你可以访问此如下:

df['type'] = df['type'].apply(lambda x: ''.join('{}{}'.format(ch,len(list(group))) for ch, group in itertools.groupby(x)))