Как удалить перечисленные записи из кадра данных по строке? - PullRequest
0 голосов
/ 24 января 2019

У меня есть два отдельных фрейма данных по ~ 100 тыс. Строк в каждом.Один кадр данных содержит список (заголовок столбца "list_A") имен столбцов, которые соответствуют критериям A, другой (заголовок столбца "list_B") имеет список имен, которые не соответствуют критериям B (рассчитывается на основе отдельной информации, относящейся к их относительным кадрам данных).Я пытаюсь создать список имен, которые соответствуют обоим критериям, удалив имена из списка B из списка A без использования цикла.Возможно ли это?

Например, вытягивание столбца «list_A» может выглядеть примерно так:

    [['X','Y','Z','A'],
     ['X','Y','Z','A'],
     ['Y','Z','A']...]

А «list_B» может выглядеть примерно так:

    [['Z'],
     [],
     ['A']...]

И я бы хотел закончить так:

    [['X','Y','A'],
     ['X','Y','Z','A'],
     ['Y','Z']...]

Есть ли способ сделать это без дорогостоящего цикла for?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы можете сделать это следующим образом (возможно, существуют более эффективные способы, но списки в столбцах не склонны к высокоскоростным векторизованным операциям)

df = pd.DataFrame({"a":[['X','Y','Z','A'],['X','Y','Z','A'],['Y','Z','A']], "b":[['Z'], [], ['A']]})

df.apply(lambda x: list(set(x["a"]).difference(set(x["b"]))), axis=1)
0 голосов
/ 24 января 2019

Попробуйте, если заказ не имеет значения

df['list_A'] = df.apply(lambda x: list(set(x['list_A']) - set(x['list_B'])), axis=1)
...