0

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!

3 Answers3

0

Use a 'melt' function:

df_melted = pd.melt(df, id_vars=['ID'], value_vars=['a1', 'a2', 'a3'], var_name='Levels', value_name='Values')
Dmitrii Malygin
  • 144
  • 2
  • 2
  • 12
0

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
PaulS
  • 21,159
  • 2
  • 9
  • 26
0

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)
imad.nyc
  • 57
  • 10