Умножьте две серии с MultiIndex в пандах

Я пытаюсь умножить две Series , как с MultiIndex :

 import pandas as pd tuples = [(0, 100, 1000),(0, 100, 1001),(0, 100, 1002), (1, 101, 1001)] index_3levels=pd.MultiIndex.from_tuples(tuples,names=["l1","l2","l3"]) tuples = [(0, 100), (1, 101)] index_2levels=pd.MultiIndex.from_tuples(tuples,names=["l1","l2"]) data_3levels = pd.Series(1, index=index_3levels) data_2levels = pd.Series([2,3], index=index_2levels) print data_3levels l1 l2 l3 0 100 1000 1 1001 1 1002 1 1 101 1001 1 dtype: int64 print data_2levels l1 l2 0 100 2 1 101 3 dtype: int64 

Проблема в том, что я не могу переопределить Series от 2 до 3 уровней:

 data_2levels.reindex(data_3levels.index, level=["l1","l2"]) Exception: Join on level between two MultiIndex objects is ambiguous 

Я нашел это решение:

 for l1 in [0,1]: data_3levels[l1] *= data_2levels[l1].reindex(data_3levels[l1].index, level="l2") print data_3levels l1 l2 l3 0 100 1000 2 1001 2 1002 2 1 101 1001 3 dtype: int64 

Но я думаю, что должен быть способ выполнить эту операцию всего за 1 шаг.

2 Solutions collect form web for “Умножьте две серии с MultiIndex в пандах”

Попробуй это. reset_index удаляет последний уровень, поэтому они одинаковы при умножении

 In [25]: x = data_3levels.reset_index(level=2,drop=True)*data_2levels 

Поскольку вы хотите, чтобы исходный индекс (и форма не изменилась), это работает.

 In [26]: x.index=data_3levels.index In [27]: x Out[27]: l1 l2 l3 0 100 1000 2 1001 2 1002 2 1 101 1001 3 dtype: int64 

Обходной путь к нему до тех пор, пока «приятное» решение не возникнет через различные запросы расширения.

Вы можете просто:

  • unstack уровень проблемных индексов
  • сделать умножение
  • stack проблемный уровень (ы) индекса.

Как это:

 In [92]: data_3levels.unstack('l3').mul(data_2levels, axis=0).stack() Out[92]: l1 l2 l3 0 100 1000 2 1001 2 1002 2 1 101 1001 3 dtype: float64 
  • Multiindex pandas groupby + aggregate, сохранить полный индекс
  • Обозначения замены в матрице numpy
  • Как добавить новый элемент в столбец pandas.DataFrame, который является списком?
  • Pandas: добавление строки к фреймворку данных и указание его метки индекса
  • Преобразование временных интервалов из панд Временные метки
  • ValueError: длина строк должна совпадать, если сравнивать даты в Pandas
  • установить разницу для панд
  • Возможно ли, чтобы кадр данных pandas отображался в новом окне?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.