параметр суффикса pandas wide_to_long - PullRequest
0 голосов
/ 03 мая 2018

У меня есть вопрос о параметре при использовании wide_to_long в пандах. Есть параметр с именем suffix, который я не понимаю.

В документации сказано:

суффикс: str, по умолчанию ‘\ d +’

Регулярное выражение, фиксирующее искомые суффиксы. ‘\ D +’ захватывает числовые суффиксы. Суффиксы без номеров можно указывать с помощью класса отрицательных символов «\ D +». Вы также можете устранить неоднозначность суффиксов, например, если ваши широкие переменные имеют форму Aone, Btwo, .., и у вас есть несвязанный столбец Arating, вы можете игнорировать последний, указав суффикс = '(!? one | two ) '

Новое в версии 0.20.0.

Вопрос: Что можно использовать для суффикса?

И я обнаружил, что кто-то использует такой суффикс при использовании wide_to_long: suffix='.' Что это делает?

1 Ответ

0 голосов
/ 03 мая 2018

TLDR : для параметра суффикса можно использовать группы захвата регулярных выражений.

Параметр suffix сообщает pandas.wide_to_long, какие столбцы следует включить в преобразование на основе суффикса после заглушки.

Поведение по умолчанию от широких до длинных предполагает, что ваши столбцы помечены числами , поэтому, например, столбцы A1, A2, A3, A4 будут работать без указания суффиксного параметра, а Aone, Atwo, Athree, Afour не удастся.

Как объяснено, он также имеет различные другие применения в тех редких случаях, когда ваши столбцы могут быть A1, A2, A3, A4, A100, и вы на самом деле не хотите включать A100, потому что он на самом деле не связан с другими A# столбцы.

Вот несколько иллюстративных примеров.

import pandas as pd
df = pd.DataFrame({'id': [1,2], 'A_1': ['a', 'b'],
                  'A_2': ['aa', 'bb'], 'A_3': ['aaa', 'bbb'],
                  'A_person': ['Mike', 'Amy']})

pd.wide_to_long(df, stubnames='A_', i='id', j='num')
#       A_person   A_
#id num              
#1  1       Mike    a
#2  1        Amy    b
#1  2       Mike   aa
#2  2        Amy   bb
#1  3       Mike  aaa
#2  3        Amy  bbb

Поскольку поведение по умолчанию заключается только в рассмотрении чисел, 'A_person' было проигнорировано. Если вы хотите добавить это в преобразование, вы должны использовать параметр suffix. Давайте скажем, что нам нужны цифры или слова.

pd.wide_to_long(df, stubnames='A_', i='id', j='suffix', suffix='(\d+|\w+)')
#             A_
#id suffix         
#1  1          a
#2  1          b
#1  2         aa
#2  2         bb
#1  3        aaa
#2  3        bbb
#1  person  Mike
#2  person   Amy

Теперь, если ваш df начинается без числовых суффиксов, вы можете позаботиться об этом и с параметром суффикса. Вызов по умолчанию не удастся, потому что он ожидает чисел, но, говоря, что он ищет слова, вы получите то, что вы хотите.

df = pd.DataFrame({'id': [1,2], 'A_one': ['a', 'b'],
                  'A_two': ['aa', 'bb'], 'A_three': ['aaa', 'bbb'],
                  'A_person': ['Mike', 'Amy']})

pd.wide_to_long(df, stubnames='A_', i='id', j='num')
#Empty DataFrame
#Columns: [A_three, A_person, A_one, A_two, A_]
#Index: []

pd.wide_to_long(df, stubnames='A_', i='id', j='suffix', suffix='\w+')
#             A_
#id suffix         
#1  one        a
#2  one        b
#1  person  Mike
#2  person   Amy
#1  three    aaa
#2  three    bbb
#1  two       aa
#2  two       bb

А если вы не хотите включать A_person, вы можете указать параметру суффикса включить только определенные заглушки.

pd.wide_to_long(df, stubnames='A_', i='id', j='num', suffix='(one|two|three)')
#         A_person   A_
#id num                
#1  one       Mike    a
#2  one        Amy    b
#1  three     Mike  aaa
#2  three      Amy  bbb
#1  two       Mike   aa
#2  two        Amy   bb

По сути, если вы можете захватить его с помощью регулярных выражений, вы можете передать его в суффикс, чтобы использовать только те столбцы, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...