Таким образом, у меня есть следующий 3D-кадр данных Pandas, new
:
unique cat numerical
c f b d a e
0 2 5 1 3 0 4
1 8 11 7 9 6 10
2 14 17 13 15 12 16
Я хочу найти, какой «более мелкий» столбец содержит «более глубокий» столбец «d», который будет «кошкой»,Я действительно новичок в Pandas, но после того, как некоторое время смотрю на new.columns
:
MultiIndex(levels=[['cat', 'numerical', 'unique'], ['a', 'b', 'c', 'd', 'e', 'f']],
labels=[[2, 2, 0, 0, 1, 1], [2, 5, 1, 3, 0, 4]])
, я наконец-то понял, что это действительно, казалось бы, многословный, чрезвычайно вложенный, запутанный способ сделать это, что заставляет меня'cat'
:
print(
new.columns.levels[0][\
new.columns.labels[0][\
pd.Index(new.columns.labels[1]).get_loc(\
pd.Index(new.columns.levels[1]).get_loc('d'))]]
)
Я в основном получаю позицию 'd' во втором массиве под уровнями (назовем это pos1), затем нахожу позицию (pos2) этого значения (pos1)во втором массиве под метками, а затем найти значение (val1) в первом массиве под «метками», используя эту позицию (pos2), и, наконец, найти, какое имя столбца в первом массиве в «уровнях», используя позицию val1.
Итак, мой вопрос: есть ли лучший, «правильный» способ сделать все это?Спасибо.
PS на отдельном примечании, все это на самом деле просто так, что я могу искать столбец "d", не зная, к какому "пологому" столбцу он принадлежит:
row = (new.loc[new['cat']['d'] == 9])
, так чтоЯ получаю:
unique cat numerical
c f b d a e
1 8 11 7 9 6 10
Так что, если бы был способ сделать это, весь этот вопрос можно было бы избежать. (Я новичок в переполнении стека, я должен поместить это в новый вопрос или smt)