Как отсортировать многоиндексный магазин HDF в python? - PullRequest
0 голосов
/ 05 октября 2019

Я предполагаю, что это можно сделать с помощью "ptrepack". К сожалению, я не знаю, как заставить работать сортировку.

Как указать аргументы сортировки ("--sortby = index", "--checkCSI")

Пример:

from subprocess import call
from os import rename, remove

file_name = 'my_file.h5'

# create dataframe
df = pd.DataFrame({'id': ['A','C','C','B','A','B'], 
                   'id_no': [3,2,1,4,5,6], 
                   'value': [100,200,300,400,500,600]},
                   ).set_index(['id','id_no'])

# create hdf store
store = pd.HDFStore(file_name, mode='a', complib='blosc',complevel=9)
store['my_table'] = df
store.close()

# repack the file & sort it by index columns
command = ["ptrepack", "-o", "--chunkshape=auto", 
           #"--sortby=index", "--checkCSI", 
            "--propindexes", "--complevel=9", "--complib=blosc",
            file_name+':', file_name[:-3]+'_tmp.h5:']
if call(command) != 0:
    print('ptrepack failed - file could not be repacked')
else:
    remove(file_name)
    rename(file_name[:-3]+'_tmp.h5', file_name)

# expected result
print(df.sort_index(level=df.index.names))

Внешний вид несортированного хранилища HDFнапример:

          value
id id_no       
A  3        100
C  2        200
   1        300
B  4        400
A  5        500
B  6        600

Отсортированное хранилище HDF должно быть:

          value
id id_no       
A  3        100
   5        500
B  4        400
   6        600
C  1        300
   2        200

Каков наилучший способ сортировки существующего хранилища HDF по мультииндексу?

...