Правильный способ работы со списком связанных элементов данных, связанных с несколькими значениями индекса, с помощью pandas/pytables

Мне было интересно, как правильно поступить с хранением/чтением списка элементов, таких как следующий пример, связанный с рок-звездой, где известно, что список содержит максимальное количество значений для hdf5:

Date_of_Birth
Bands[] - where the maximum number of bands is 10
Siblings[] - where the maximum number of siblings is 6
Date_of_Death

Все это будут имена столбцов.

Один из способов, который я рассматривал, но который дал ошибку (ValueError: cannot reindex from a duplicate axis), заключался в том, чтобы иметь повторяющиеся имена столбцов. В противном случае я мог бы иметь Bands 1, Bands 2 и т. д., но это сделало бы поиск и запросы утомительными. Есть ли способ лучше? Любая помощь будет очень высоко ценится!


person Cenoc    schedule 09.08.2014    source источник
comment
При использовании пронумерованных имен вы можете сделать что-то вроде df.filter(like='Bands'), чтобы выбрать все строки «Полосы».   -  person joris    schedule 10.08.2014
comment
Интересно... есть ли способ сделать запрос по всем отфильтрованным? Я знаю только способ запроса поэлементно.   -  person Cenoc    schedule 10.08.2014


Ответы (1)


Для чего-то подобного, когда вы действительно хотите перечислить каждый столбец групп и братьев и сестер, я бы попытался использовать мультииндекс

скажем, у вас есть кадр данных, который вы вызываете df с этими столбцами, вызов df.columns выдает что-то вроде Int64Index([dob, band_1, band_2], dtype='int64'). Вы можете преобразовать свой индекс во что-то, что захватит все полосы одновременно, выполнив это...

отредактировано нашел способ сделать "частичный" MultiIndex

df.columns = pd.MultiIndex.from_tuples([('dob',''),('bands','band_1'),('bands','band_2')])

Также совет по построению списка кортежей. Вы можете добавить кучу списков в существующие столбцы....

 [('band',each) for each in df.columns[df.columns>1].apply(lambda x: re.search("band",x)]
 #etc
person ZJS    schedule 11.08.2014