Это может быть не очень элегантно и не очень быстро, но это работает.Я надеюсь, что это достаточно хорошо для ваших нужд.
Вы генерируете функцию, которая сортирует строку в соответствии с вашими потребностями, а затем используете отображение панд, чтобы применить ее ко всем вашим элементам, так:
def clean(string):
if (len(string)==0):
return ''
if (set(string) == set(string[0])):
return ''
prev = None
letters = [l for l in string]
counter = 1
new = []
for l in letters:
if l==prev:
counter+=1
else:
if (counter==2):
new.append(prev)
counter=1
new.append(l)
prev = l
return ''.join(new)
, а затем вы можете сделать:
df['text'] = df['text'].fillna('').map(clean)
Вкратце, сначала вы проверяете, соответствует ли вся строка одной букве (набор будет содержать только уникальные элементы).Затем вы начинаете перебирать все буквы, пропуская повторы, но сохраняя количество повторяющихся букв.Наконец, когда повторяющаяся последовательность сделана, вы добавляете еще одну копию, только если количество повторений было ровно 2.
Я проверил это и получил ожидаемые результаты, но если вы столкнулись с проблемой в каком-то случае, я не сделал 'Не подумайте о проверке, пожалуйста, дайте мне знать, и я все исправлю.