Получение последнего элемента списка в столбце Panda Dataframe - PullRequest
2 голосов
/ 27 мая 2019

У меня есть этот пример файла CSV: (прочитайте это, поскольку элемент AAA стоит 1000, а элемент AAA (1) стоит 2000)

ColumnName
AAA (1000)
AAA (1) (2000)

Я бы хотел создать столбец данных для панд из всех чисел

е

Column_cost
1000
2000

Я попытался разделить это на '(', что возвращает что-то вроде следующего (потому что второй элемент имеет '(' в имени:

Result 1
Col_1 Col_2 Col_3

AAA 1000) None

AAA   1)  2000)  

так что цифры не в одном столбце

Затем я попытался создать столбцы списков, которые дают

Result 2

ColumnName2

[AAA,1000)]

[AAA,1),2000)]

но опять же, я не знаю, как создать столбец, который использует последний элемент каждого списка.

Я могу получить его для определенного индекса, но не для всего столбца

x = df['ColumnName'].str.split('(',expand=True) gives Result 1 above

x = df['ColumnName'].str.split('(') gives Result 2 above

Из результата 2 я сделал следующее, чтобы получить желаемый результат для одной конкретной ячейки, но я не знаю, как сделать это для всего столбца (я могу сделать это для небольшого набора данных, но не для большого один)

извлекает список определенного индекса, получает последний элемент списка, разделяет его по пробелам и затем получает новый элемент разделенного списка

x[0][-1].split()[0]
x[1][-1].split()[0]

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Другое решение с использованием Series.str.split, str.strip и astype:

df['Column_cost'] = df.ColumnName.str.split('(').str[-1].str.strip(')').astype(int)

[выход]

       ColumnName  Column_cost
0      AAA (1000)         1000
1  AAA (1) (2000)         2000
1 голос
/ 27 мая 2019

Вы можете использовать str.extract, чтобы сопоставить цифры в скобках, и добавить '$', чтобы оно совпадало только в конце строки:

df.assign(Column_cost = df.ColumnName.str.extract(r'\((\d+)\)$'))

       ColunmName    Column_cost
0      AAA (1000)        1000
1  AAA (1) (2000)        2000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...