#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть многоиндексный фрейм данных с 2 уровнями индекса и 2 уровнями столбцов.
Индекс первого уровня и столбцы первого индекса одинаковы. Вторые уровни имеют общие элементы, но не равны. Это дает мне неквадратичный фрейм данных (у меня в столбцах 2-го уровня больше элементов, чем в моем индексе второго уровня)
Я хочу установить для всех элементов моего фрейма данных значение 0 в случае, если индекс первого уровня не равен столбцу первого уровня. Я сделал это рекурсивно, но уверен, что есть способ получше.
Вы можете помочь?
Спасибо
Комментарии:
1. Можете ли вы добавить пример фрейма данных и ожидаемые результаты к этому вопросу.
2. Обновите свой вопрос. Пожалуйста, спасибо.
3. Конечно. В примере с веб-сайта pydata массивы = [[‘bar’, ‘bar’, ‘baz’, ‘baz’, ‘foo’, ‘foo’, ‘qux’, ‘qux’],[‘one’, ‘two’, ‘one’, ‘two’, ‘one’, ‘two’, ‘one’, ‘two’, ‘one’, ‘one’, ‘two’, ‘one’, ‘two’]] кортежи = список (zip(* массивы)) df=pd. Фрейм данных (np.random.randn(6, 6), index=index[:6], columns=index[:6]) Я хочу, чтобы всем элементам фрейма данных, для которых столбец первого уровня и индекс первого уровня не совпадают, было установлено значение 0 (т. Е. bar / baz, bar / foo, baz /bar, baz /foo, foo/bar, foo/baz)
4. Прошу прощения, я понимаю, что это все еще неспецифично. Я нашел способ сделать это, но он все еще выглядит довольно уродливо: для индекса в level1_index: df.loc[index,list(set(level1_column).difference(set([index])))]=0