Apollo
Apollo

Reputation: 146

How can I merge my columns into a single one using a multiindex

I have a DataFrame looking like this:

year    2015    2016    2017    2018    2019    2015    2016    2017    2018    2019    ...     2015    2016    2017    2018    2019    2015    2016    2017    2018    2019
    PATIENTS    PATIENTS    PATIENTS    PATIENTS    PATIENTS    month   month   month   month   month   ...     diffs_24h   diffs_24h   diffs_24h   diffs_24h   diffs_24h   diffs_168h  diffs_168h  diffs_168h  diffs_168h  diffs_168h
date                                                                                    
2016-01-01 00:00:00     0.0     2.0     1.0     7.0     3.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    -4.0    2.0     -2.0    NaN     -3.0    -2.0    -3.0    -6.0
2016-01-01 01:00:00     6.0     6.0     7.0     6.0     7.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     4.0     0.0     0.0     1.0     NaN     3.0     1.0     2.0     -1.0
2016-01-01 02:00:00     2.0     7.0     6.0     2.0     3.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     4.0     3.0     -1.0    0.0     NaN     6.0     2.0     -3.0    0.0
2016-01-01 03:00:00     0.0     2.0     2.0     4.0     6.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    0.0     2.0     4.0     NaN     -1.0    -2.0    3.0     3.0
2016-01-01 04:00:00     1.0     2.0     5.0     8.0     0.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    5.0     7.0     -1.0    NaN     -2.0    3.0     5.0     -2.0
...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...
2016-12-31 19:00:00     6.0     7.0     6.0     6.0     6.0     12.0    12.0    12.0    12.0    12.0    ...     -9.0    -1.0    -7.0    1.0     -2.0    1.0     0.0     -6.0    -4.0    0.0
2016-12-31 20:00:00     2.0     2.0     5.0     5.0     3.0     12.0    12.0    12.0    12.0    12.0    ...     -9.0    -7.0    -12.0   -1.0    -10.0   -2.0    -6.0    -2.0    -1.0    -4.0
2016-12-31 21:00:00     4.0     5.0     3.0     3.0     3.0     12.0    12.0    12.0    12.0    12.0    ...     -2.0    -3.0    -10.0   -2.0    -11.0   -2.0    -2.0    -2.0    -3.0    -2.0
2016-12-31 22:00:00     5.0     2.0     6.0     6.0     3.0     12.0    12.0    12.0    12.0    12.0    ...     0.0     -6.0    -4.0    5.0     -4.0    2.0     -1.0    0.0     2.0     -3.0
2016-12-31 23:00:00     1.0     3.0     4.0     4.0     6.0     12.0    12.0    12.0    12.0    12.0    ...     -6.0    -1.0    -11.0   2.0     -3.0    -4.0    -2.0    -7.0    -2.0    -2.0

and I want to end with a DataFrame in which the first level is the years but having a single year with all of the columns inside. How can I achieve that?

Example:

year    2015           2016                   2017               2018             2019  
    PATIENTS    month  PATIENTS     motnh    PATIENTS   month   PATIENTS month  PATIENTS month  ...     
date                                                                                    
2016-01-01 00:00:00     0.0     2.0     1.0     7.0     3.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    -4.0    2.0     -2.0    NaN     -3.0    -2.0    -3.0    -6.0
2016-01-01 01:00:00     6.0     6.0     7.0     6.0     7.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     4.0     0.0     0.0     1.0     NaN     3.0     1.0     2.0     -1.0
2016-01-01 02:00:00     2.0     7.0     6.0     2.0     3.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     4.0     3.0     -1.0    0.0     NaN     6.0     2.0     -3.0    0.0
2016-01-01 03:00:00     0.0     2.0     2.0     4.0     6.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    0.0     2.0     4.0     NaN     -1.0    -2.0    3.0     3.0
2016-01-01 04:00:00     1.0     2.0     5.0     8.0     0.0     1.0     1.0     1.0     1.0     1.0     ...     NaN     -1.0    5.0     7.0     -1.0    NaN     -2.0    3.0     5.0     -2.0
...     ...     ...     ...     ...     ...     ...     ...     ...     ...     ...     .

Upvotes: 1

Views: 35

Answers (1)

ansev
ansev

Reputation: 30930

I think you only need sort your columns:

new_df = df.sort_index(axis=1, level=0)

Upvotes: 1

Related Questions