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