A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/pandas-dev/pandas/issues/9463 below:

binary operator methods (eg mul) don't handle integer level · Issue #9463 · pandas-dev/pandas · GitHub

Suppose I have the following dataframe and series:

In [20]: df = pd.DataFrame(np.ones((3,4)), columns=pd.MultiIndex.from_product([['A', 'B'],['a', 'b']]))

In [21]: s = pd.Series({'a':1, 'b':2})

In [22]: df
Out[22]: 
   A     B   
   a  b  a  b
0  1  1  1  1
1  1  1  1  1
2  1  1  1  1

In [23]: s
Out[23]: 
a    1
b    2
dtype: int64

Trying to multiply this by the columns, and matching on the second level, gives the following error:

In [24]: df.mul(s, axis=1, level=1)
...
  File "C:\Anaconda\lib\site-packages\pandas\core\index.py", line 1786, in _join_multi
    raise ValueError("cannot join with no level specified and no overlapping names")

ValueError: cannot join with no level specified and no overlapping names

In any case, this is a wrong error message, as I did specify a level.
Further, this does work and gives the expected output with a named level instead of a integer level:

In [25]: df2 = df.copy()
    ...: df2.columns.names = ['l0', 'l1']

In [35]: df2.mul(s, axis=1, level='l1') # <-- works

Out[35]: 
l0  A     B   
l1  a  b  a  b
0   1  2  1  2
1   1  2  1  2
2   1  2  1  2

Am I correct that this should also work with integer levels?


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4