Работа со списками как элементами ячейки Pandas

#python #pandas #list

#питон #pandas #Список

Вопрос:

Я работаю с фреймами данных pandas, где некоторые столбцы имеют отдельные списки в качестве элементов ячеек. Я хочу условно выбрать элементы в каждой ячейке в одном столбце и прочитать соответствующие элементы в списках с тем же индексом в другом столбце (а затем распечатать как другой столбец). Я изо всех сил пытаюсь понять, как это сделать. Чтобы объяснить проблему на примере:

A B C D
0 3.4 5.7 [1,4,2] [2.5,3.4,1.2]
1 4 1.7 [7,4,5,2] [12.15,1.2,34.2,67.2]

Я хочу поставить условие для списков в столбце C (например, выбрать значения> 3) и прочитать соответствующие элементы в столбце D, чтобы распечатать их в столбце E. Это должно дать мне что-то вроде этого:

A B C D E
0 3.4 5.7 [1,4,2] [2.5,3.4,1.2] [3.4]
1 4 1.7 [7,4,5,2] [12.15,1.2,34.2,67.2] [12.15,1.2,34.2]

Помощь будет очень признательна.

Ответ №1:

Понимание списка — ваш друг — здесь заархивированные столбцы, а затем во вложенном понимании списка отфильтрованные заархивированные списки:

 df['E'] = [[b for a, b in zip(x, y) if a > 3] for x, y in zip(df['C'], df['D'])]
print (df)
     A    B             C                         D                   E
0  3.4  5.7     [1, 4, 2]           [2.5, 3.4, 1.2]               [3.4]
1  4.0  1.7  [7, 4, 5, 2]  [12.15, 1.2, 34.2, 67.2]  [12.15, 1.2, 34.2]
 

Или вы можете использовать логическое индексирование с преобразованием списков в массивы numpy:

 df['E'] = [list(np.array(y)[np.array(x) > 3]) for x, y in zip(df['C'], df['D'])]
print (df)
     A    B             C                         D                   E
0  3.4  5.7     [1, 4, 2]           [2.5, 3.4, 1.2]               [3.4]
1  4.0  1.7  [7, 4, 5, 2]  [12.15, 1.2, 34.2, 67.2]  [12.15, 1.2, 34.2]