Can someone help me with this transformation. I have a dataset:
| ID | a1 | a2 | a3 |
|---|---|---|---|
| a | 1 | 5 | 3 |
| a | 2 | 3 | 3 |
| b | 2 | 3 | 5 |
| b | 3 | 5 | 6 |
| c | 5 | 1 | 3 |
| c | 2 | 4 | 2 |
and i want it like this:
| ID | Levels |
|---|---|
| a | 1 |
| a | 5 |
| a | 3 |
| a | 2 |
| a | 3 |
| a | 3 |
| b | 2 |
| b | 3 |
| b | 5 |
| b | 3 |
| b | 5 |
| b | 6 |
..... and so forth.Thanks!
Can someone help me with this transformation. I have a dataset:
| ID | a1 | a2 | a3 |
|---|---|---|---|
| a | 1 | 5 | 3 |
| a | 2 | 3 | 3 |
| b | 2 | 3 | 5 |
| b | 3 | 5 | 6 |
| c | 5 | 1 | 3 |
| c | 2 | 4 | 2 |
and i want it like this:
| ID | Levels |
|---|---|
| a | 1 |
| a | 5 |
| a | 3 |
| a | 2 |
| a | 3 |
| a | 3 |
| b | 2 |
| b | 3 |
| b | 5 |
| b | 3 |
| b | 5 |
| b | 6 |
..... and so forth.Thanks!
Use a 'melt' function:
df_melted = pd.melt(df, id_vars=['ID'], value_vars=['a1', 'a2', 'a3'], var_name='Levels', value_name='Values')
A possible solution:
df.set_index('ID').stack().droplevel(1).reset_index(name='Levels')
Output:
ID Levels
0 a 1
1 a 5
2 a 3
3 a 2
4 a 3
5 a 3
6 b 2
7 b 3
8 b 5
9 b 3
10 b 5
11 b 6
12 c 5
13 c 1
14 c 3
15 c 2
16 c 4
17 c 2
You can use pd.MultiIndex
names = ["ID", "Levels"]
data = <your data>
index = pd.MultiIndex.from_product([range(i) for i in data.shape], names=names)
df = pd.DataFrame(data, index=index)