How it works...

In step 1, we notice that there are five variables placed vertically in the Info column with their corresponding value in the Value column. Because we need to pivot each of these five variables as horizontal column names, it would seem that the pivot method would work. Unfortunately, pandas developers have yet to implement this special case when there is more than one non-pivoted column. We are forced to use a different method.

The unstack method also pivots vertical data, but only for data in the index. Step 3 begins this process by moving both the columns that will and will not be pivoted into the index with the set_index method. Once these columns are in the index, unstack can be put to work as done in step 3.

Notice that as we are unstacking a DataFrame, pandas keeps the original column names (here, it is just a single column, Value) and creates a MultiIndex with the old column names as the upper level. The dataset is now essentially tidy but we go ahead and make our non-pivoted columns normal columns with the reset_index method. Because we have MultiIndex columns, we can choose which level the new column names will belong to with the col_level parameter. By default, the names are inserted into the uppermost level (level 0). We use -1 to indicate the bottommost level.

After all this, we have some excess DataFrame names and indexes that need to be discarded. Unfortunately, there isn't a DataFrame method that can remove levels, so we must drop down into the index and use its droplevel method. Here, we overwrite the old MultiIndex columns with single-level columns. These columns still have a useless name attribute, Info, which is renamed to None.

Cleaning up the MultiIndex columns could have been avoided by forcing the resulting DataFrame from step 3 to a Series. The squeeze method works only on single-column DataFrames and turns them into Series.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.218.239.182