Reshaping Wide Data to Long Format in Pandas
In the realm of data manipulation, reshaping data from wide to long format often arises as a necessity. Consider the following pandas dataframe:
AA | BB | CC | |
---|---|---|---|
05/03 | 1 | 2 | 3 |
06/03 | 4 | 5 | 6 |
07/03 | 7 | 8 | 9 |
08/03 | 5 | 7 | 1 |
To transform this into the desired long format:
| AA | 05/03 | 1 |
| AA | 06/03 | 4 |
| AA | 07/03 | 7 |
| AA | 08/03 | 5 |
| BB | 05/03 | 2 |
| BB | 06/03 | 5 |
| BB | 07/03 | 8 |
| BB | 08/03 | 7 |
| CC | 05/03 | 3 |
| CC | 06/03 | 6 |
| CC | 07/03 | 9 |
| CC | 08/03 | 1 |
We employ the pandas.melt or pandas.DataFrame.melt function, which elegantly transforms wide data into long format.
import pandas as pd df = pd.DataFrame({ 'date' : ['05/03', '06/03', '07/03', '08/03'], 'AA' : [1, 4, 7, 5], 'BB' : [2, 5, 8, 7], 'CC' : [3, 6, 9, 1] }).set_index('date') df = df.reset_index() pd.melt(df, id_vars='date', value_vars=['AA', 'BB', 'CC'])
Alternatively, one can omit the reset_index step by calling melt with ignore_index=False:
dfm = df.melt(ignore_index=False).reset_index()
Resulting in the desired long format:
date | variable | value | |
---|---|---|---|
0 | 05/03 | AA | 1 |
1 | 06/03 | AA | 4 |
2 | 07/03 | AA | 7 |
3 | 08/03 | AA | 5 |
4 | 05/03 | BB | 2 |
5 | 06/03 | BB | 5 |
6 | 07/03 | BB | 8 |
7 | 08/03 | BB | 7 |
8 | 05/03 | CC | 3 |
9 | 06/03 | CC | 6 |
10 | 07/03 | CC | 9 |
11 | 08/03 | CC | 1 |
This transformation enables efficient merging with other dataframes based on shared dates and column names.
The above is the detailed content of How to Transform Wide Data to Long Format in Pandas?. For more information, please follow other related articles on the PHP Chinese website!