pandas.HDFStore.append_to_multiple with pandas.MultiIndex

Я пишу DataFrame в две таблицы, используя pandas.HDFStore.append_to_multiple а затем прочитать его обратно с pandas.HDFStore.select_as_multiple, но я получаю DataFrame с дополнительными строками.

df = pd.DataFrame(dict(a=[1,1,1,1,1,2,2,2,2,2],
                       b=[4,4,4,4,4,4,4,4,4,4],
                       c=[6,7,6,7,6,7,6,7,6,7],
                       d=np.random.rand(10),
                       e=np.random.rand(10)))
df = df.set_index(['a', 'b', 'c'])
df
>>>
            d           e
a   b   c       
1   4   6   0.576224    0.285766
        7   0.642458    0.098230
        6   0.579436    0.017601
        7   0.740945    0.769283
        6   0.758087    0.057052
2   4   7   0.092393    0.570647
        6   0.960140    0.094415
        7   0.940927    0.071686
        6   0.289833    0.003229
        7   0.274301    0.859293

store.append_to_multiple({'idx':['d'], 'data':None}, df, 
                         selector='idx', dropna=True, index=True)

Затем я прочитал это обратно в:

df2 = store.select_as_multiple(['idx' , 'data'])
df2
>>>
            d           e
a   b   c       
1   4   6   0.325709    0.989198
        6   0.498586    0.857124
        6   0.348262    0.720234
        6   0.325709    0.989198
        6   0.498586    0.857124
        6   0.348262    0.720234
        6   0.325709    0.989198
        6   0.498586    0.857124
        6   0.348262    0.720234
        7   0.244739    0.327261
        7   0.640157    0.654922
        7   0.244739    0.327261
        7   0.640157    0.654922
2   4   6   0.761300    0.288723
        6   0.157579    0.404413
        6   0.761300    0.288723
        6   0.157579    0.404413
        7   0.491842    0.713137
        7   0.916732    0.610775
        7   0.002731    0.119276
        7   0.491842    0.713137
        7   0.916732    0.610775
        7   0.002731    0.119276
        7   0.491842    0.713137
        7   0.916732    0.610775
        7   0.002731    0.119276

Я жду df2 равному df но у него есть дополнительные строки. Проходя через отладчик, я вижу следующую строку в pytables.py:

992:           value = value.ix[valid_index]

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

Это работает правильно, если я удаляю dropna=True:

store.append_to_multiple({'idx':['d'], 'data':None}, df, 
                         selector='idx', index=True)
df2 = store.select_as_multiple(['idx' , 'data'])
df2
>>>
            d           e
a   b   c       
1   4   6   0.217079    0.880129
        6   0.498363    0.668485
        6   0.789133    0.726899
        7   0.395735    0.200052
        7   0.397049    0.634318
2   4   6   0.406110    0.373711
        6   0.634547    0.715953
        7   0.723585    0.144365
        7   0.844752    0.696289
        7   0.508510    0.751932

Windows x64 Python 2.7 панды 0.18.1

0 ответов

Другие вопросы по тегам