Pandas MultiIndex из регулярного выражения на столбце

У меня есть рамка данных pandas, которая выглядит

df = pd.DataFrame( [ ['JoeSmith', 5], ['CathySmith', 3], ['BrianSmith', 12], ['MarySmith', 67], ['JoeJones', 23], ['CathyJones', 98], ['BrianJones', 438], ['MaryJones', 75], ['JoeCollins', 56], ['CathyCollins', 125], ['BrianCollins', 900], ['MaryCollins', 321], ], columns = ['Name', 'Value'] ) print df Name Value 0 JoeSmith 5 1 CathySmith 3 2 BrianSmith 12 3 MarySmith 67 4 JoeJones 23 5 CathyJones 98 6 BrianJones 438 7 MaryJones 75 8 JoeCollins 56 9 CathyCollins 125 10 BrianCollins 900 11 MaryCollins 321 

Первый столбец «Имя» должен быть разделен на имена First и Last и помещен в MultiIndex.

  Value Joe Smith 5 Cathy Smith 3 Brian Smith 12 Mary Smith 67 Joe Jones 23 Cathy Jones 98 Brian Jones 438 Mary Jones 75 Joe Collins 56 Cathy Collins 125 Brian Collins 900 Mary Collins 321 

2 Solutions collect form web for “Pandas MultiIndex из регулярного выражения на столбце”

Я думаю, вы можете использовать extract для извлечения Names и surname , а затем set_index и последний столбец с set_index Name :

 df[['name','surname']] = df.Name.str.extract(r'([AZ][az]*)([AZ][az]*)', expand=True) df = df.set_index(['name','surname']).drop('Name', axis=1) print df Value name surname Joe Smith 5 Cathy Smith 3 Brian Smith 12 Mary Smith 67 Joe Jones 23 Cathy Jones 98 Brian Jones 438 Mary Jones 75 Joe Collins 56 Cathy Collins 125 Brian Collins 900 Mary Collins 321 

Решение

 import pandas as pd pattern = r'.*\b([AZ][az]*)([AZ][az]*)\b.*' names = df.Name.str.extract(pattern, expand=True) midx = pd.MultiIndex.from_tuples(names.values.tolist()) df.index = midx df[['Value']] 

объяснение

pattern захватывает группу букв, начинающуюся с капитала AZ за которой следует любое число нижних регистров az за которым следует еще один капитал AZ и любое количество нижних регистров az . Затем он разбивает его на две части.

pd.MultiIndex.from_tuples создает MultiIndex .

names.values.tolist() превращает преобразованный DataFrame в список списков, которые будут интерпретироваться как кортежи.

  • Использование регулярного выражения для замены данных файла
  • Python beautifulsoup пытается удалить html-теги 'span'
  • Как сопоставить любую строку из списка строк в регулярных выражениях в python?
  • Python Regex для синтаксического анализа и возврата кортежа
  • Как сопоставить новый символ строки в исходной строке Python
  • Python regex AttributeError: объект 'NoneType' не имеет атрибута 'group'
  • Есть ли lib для генерации данных в соответствии с регулярным выражением? (Python или другое)
  • Регулярные выражения и коды символов в данных экспорта Scrapy
  •  
    Interesting Posts for Van-Lav

    Стратегия программирования, чтобы обойти ограничение потока os?

    shift_right python, использующий для циклов

    Потенциальные исключения с использованием встроенного типа str () в Python

    Python: есть ли прецедент для изменения класса экземпляра?

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

    Переопределить приоритет доступа к атрибуту, имеющий дескриптор данных

    пустой набор результатов прекрасный суп

    setup.py для пакетов, которые зависят как от cython, так и от f2py

    SQLAlchemy: конвертировать значение столбца взад и вперед между внутренним и базовым форматом

    Рекурсивные генераторы в Python

    Выполнение процедуры urllib2 urlopen в Python 2.4

    Пакет проекта django и его зависимостей для автономного «продукта»

    Почему рекурсия в python настолько медленная?

    Как иметь кластеры сложенных баров с python (Pandas)

    Наследование теста носа на основе Python: приборы для тестирования нагрузочных единиц из подклассов

    Python - лучший язык программирования в мире.