Добавьте элемент -n в list-series в другой list-series, если выполнено условие

#python #pandas #list

#python #панды #Список

Вопрос:

У меня есть следующий DF (с жестко заданным желаемым результатом)

 dfo = pd.DataFrame({"list1": [["test1", "test2"], ["test1", "test2", "test3"], ["test1", "test2"]], 
                    "list2": [["notatest", "test3"], ["notatest"], ["notatest", "Test3"]],
                    "desired": [["test1", "test2", "test3"], ["test1", "test2", "test3"], ["test1", "test2", "Test3"]]})
  

В котором я хочу добавить / добавить самый последний элемент list2 ( list2[-1] ) в list1 if it == «test3» .

Пробовал следующее, но безрезультатно:

 dfo["list1_test3_added"] = dfo["list1"].apply(lambda x: x.append([i for i in x["list2"][-1] if i == "test3"]))
  

Также может быть так, что в какой-то момент кто-то теряет рассудок, и это не «test3», а «Test3», поэтому, возможно, потребуется совпадение регулярных выражений.

Комментарии:

1. Не могли бы вы добавить желаемый результат?

Ответ №1:

Проверьте последнее значение, преобразованное в нижний регистр, и, если совпадение, добавьте к одному элементу list и последнему добавлению в исходный столбец list1 :

 s = dfo["list2"].apply(lambda x: [x[-1]] if x[-1].lower() == "test3" else [])
dfo["list1_test3_added"] = dfo["list1"]   s
print (dfo)
                   list1              list2                desired  
0         [test1, test2]  [notatest, test3]  [test1, test2, test3]   
1  [test1, test2, test3]         [notatest]  [test1, test2, test3]   
2         [test1, test2]  [notatest, Test3]  [test1, test2, Test3]   

       list1_test3_added  
0  [test1, test2, test3]  
1  [test1, test2, test3]  
2  [test1, test2, Test3]