Skip to content

add support in asarray/from_frame for pandas dataframes with MultiIndex in columns #1132

@gdementen

Description

@gdementen

It currently silently "merges" all the columns axes (and loose their names), which is not too bad but not what it should.

>>> data = np.arange(16).reshape((4, 4))
>>> index = pd.MultiIndex.from_product((['a0', 'a1'], ['b0', 'b1']), names=('a', 'b'))
>>> columns = pd.MultiIndex.from_product((['c0', 'c1'], ['d0', 'd1']), names=('c', 'd'))
>>> df = pd.DataFrame(data, index=index, columns=columns)
>>> df
c      c0      c1    
d      d0  d1  d0  d1
a  b                 
a0 b0   0   1   2   3
   b1   4   5   6   7
a1 b0   8   9  10  11
   b1  12  13  14  15
>>> asarray(df)
 a  b\{2}  c0,d0  c0,d1  c1,d0  c1,d1
a0     b0      0      1      2      3
a0     b1      4      5      6      7
a1     b0      8      9     10     11
a1     b1     12     13     14     15

Here are a few extra test cases:

>>> # duplicate axes names
>>> index = pd.MultiIndex.from_product((['a0', 'a1'], ['b0', 'b1']), names=('a', 'a'))
>>> columns = pd.MultiIndex.from_product((['c0', 'c1'], ['d0', 'd1']), names=('a', 'a'))
>>> df = pd.DataFrame(data, index=index, columns=columns)
>>> asarray(df)
 a   a  a\a  d0  d1
a0  b0   c0   0   1
a0  b0   c1   2   3
a0  b1   c0   4   5
a0  b1   c1   6   7
a1  b0   c0   8   9
a1  b0   c1  10  11
a1  b1   c0  12  13
a1  b1   c1  14  15
>>> # duplicate axis name and duplicate labels (on different axes)
>>> index = pd.MultiIndex.from_product((['a0', 'a1'], ['a0', 'a1']), names=('a', 'a'))
>>> columns = pd.MultiIndex.from_product((['a0', 'a1'], ['a0', 'a1']), names=('a', 'a'))
>>> df = pd.DataFrame(data, index=index, columns=columns)
>>> asarray(df)
 a   a  a\a  a0  a1
a0  a0   a0   0   1
a0  a0   a1   2   3
a0  a1   a0   4   5
a0  a1   a1   6   7
a1  a0   a0   8   9
a1  a0   a1  10  11
a1  a1   a0  12  13
a1  a1   a1  14  15

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions