Можно ли использовать пустой MultiIndex для нарезки DataFrame? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть панда MultiIndex, которую я пытаюсь использовать, чтобы нарезать DataFrame. Когда MultiIndex пусто, это приводит к ValueError:

(Pdb) p _ix
MultiIndex(levels=[[], [], [], []],
       labels=[[], [], [], []],
       names=['foo', 'bar', 'baz', 'raz'])
(Pdb) p df.index
MultiIndex(levels=[['adni'], ['123', '234'], ['M12_s1', 'M24_s1'], ['CRB', 'CRB_crop', 'PON']],
       labels=[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0]],
       names=['foo', 'bar', 'baz', 'raz'])
(Pdb) p df.loc[_ix]
*** ValueError: operands could not be broadcast together with shapes (0,) (4,) (0,)

names из двух индексов совпадают, поэтому, насколько я понимаю, срезы должны быть в порядке.

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

Редактировать: добавить конкретный пример:

$ cat so_qc.csv
foo,bar,baz,raz,qc
pd,andrew,M24_s1,CRB,True
pd,andrew,M24_s1,CRB_crop,True

$ cat so_df.csv
foo,bar,baz,raz,value
pd,andrew,M24_s1,CRB,0.701794977111406
pd,andrew,M24_s1,CRB,0.309406238674409

$ python
qc = pd.read_csv('so_qc.csv', index_col=[0,1,2,3], squeeze=True)
df = pd.read_csv('so_df.csv', index_col=[0,1,2,3])

# This is OK
df.loc[ qc.index.intersection(df.index) ]

# When I select only False elements from `qc` (which is none of them), ValueError about broadcasting
df.loc[ qc[~qc].index.intersection(df.index) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...