Разделите столбец панд запятой и для каждого элемента разделите пробелом и, наконец, получите список - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть один столбец в кадре данных Python Pandas.Каждая строка имеет список питонов, как показано ниже.Я хочу разделить список запятыми, а затем для каждого элемента, разделенного пробелами, взять первый элемент, и, наконец, иметь набор для удаления дубликатов в этом списке.

  1. Исходный набор данных (pandas df)
MATERIAL
A 2L XXX, B 4L XXX, C 6L XXX, A 2L XXX
B 2L XXX, C 4L XXX, C 6L XXX, B 2L XXX
A 2L XXX, H 4L XXX, L 6L XXX, L 6L XXX, A 2L XXX,
M 2L XXX, N 4L XXX, P 6L XXX, L 6L XXX

Требуется вывод

MATERIAL
A, B, C
B, C
A, H, L
M, N, P, L

Если у меня есть один элемент в столбце, str.split (). Str [0] работает, и я могу получить первыйitem (после разбиения) и он работает

Но когда я попытался получить список элементов в столбце с помощью следующей лямбда-функции, я получаю сообщение об ошибке и не могу получить вывод, как указано выше

productList['MATERIAL'] = productList['MATERIAL'].apply(lambda g: ','.join([productList['MATERIAL'].str.split().str[0] for n in g]))

Было бы здорово, если бы кто-то мог пролить свет на это.Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Если порядок вывода в каждой строке не важен, используйте набор для сохранения уникальных значений.

productList['MATERIAL'] = productList['MATERIAL'].apply(lambda g: ', '.join(set((n.split()[0] for n in g.split(', ')))))

     MATERIAL
0     B, C, A
1        C, B
2     H, L, A
3  L, N, P, M

Если порядок вывода важен, используйте OrderedDict, чтобы сохранить порядок и преобразовать его.вернуться к списку.

import collections
productList['MATERIAL'] = productList['MATERIAL'].apply(lambda g: ', '.join(list(collections.OrderedDict.fromkeys((n.split()[0] for n in g.split(', '))))))

     MATERIAL
0     A, B, C
1        B, C
2     A, H, L
3  M, N, P, L

0 голосов
/ 24 сентября 2019

Одной строкой lambda для создания списка:

df['MATERIAL'] = df['MATERIAL'].map(lambda x: sorted(list(set(val.strip().split(' ')[0] for val in x.split(',')))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...