У меня есть DataFrame, в котором каждая ячейка содержит список.У меня есть функция, которая направлена на вставку «1» в каждый список, на основе условия.Однако мой код не выполняет то, что я ожидаю.
Каждый список s
состоит из элементов из двух других списков: (1) список участников (2) список не членов.Моя цель - вставить число «1» в s
, если за любым «членом» следуют любые два последовательных «не члена».Максимум один '1' должен быть добавлен к s
.Это код.
import pandas as pd
members = ['AA', 'BBB', 'CC', 'DDDD']
non_members = ['EEEE', 'FF', 'GGG', 'HHHHH', 'III', 'JJ']
s = ['AA', 'EEEE', 'GGG', 'FF']
df = pd.DataFrame({'string':[s]}) # each row of the column 'string' is a list
Итак, учитывая s
:
['AA', 'EEEE', 'GGG', 'FF']
результат, которого я пытаюсь достичь, таков:
['AA', '1', 'EEEE', 'GGG', 'FF']
Этомой код:
d = df['string']
def func(row):
out = ""
look = 2
for i in range(len(row)-look):
out += row[i]
if (row[i] in members) & \
(row[i+1] in non_members) & \
(row[i+2] in non_members):
out += '1' + row[i+1:]
break
return out
e = d.apply(func)
print(e)
Это дает только следующий результат:
string
dtype: object
Но я пытаюсь получить следующее:
['AA', '1', 'EEEE', 'GGG', 'FF']
Что самое простоеспособ туда добраться?
С этим связан вопрос выше: Как вставить символ в список, основываясь на последовательном появлении двух элементов из другого списка?Python