How can I transform multiple columns in a table to list

Question:

How can I transform Tab 1 to Tab2

transform Tab1 to Tab2

df = pd.DataFrame({'A': [3, 5], 'B': [4, 6], 'Z': [6, 8]}, index=[1, 100])

I suppose pandas df.melt might help, but I’m not sure

Asked By: aeti

||

Answers:

Use DataFrame.melt with add index values to col1 column, then sorting indices:

df1 = df.melt(ignore_index=False, var_name='col1', value_name='col2')
df1['col1'] += df1.index.astype(str)
df1 = df1.sort_index(ignore_index=True)
print (df1)
   col1  col2
0    A1     3
1    B1     4
2    Z1     6
3  A100     5
4  B100     6
5  Z100     8

Or use DataFrame.stack, join Multiindex values and convert to DataFrame:

s = df.stack()
s.index = [f'{b}{a}' for a, b in s.index]
df1 = s.rename_axis('col1').reset_index(name='col2')
print (df1)
   col1  col2
0    A1     3
1    B1     4
2    Z1     6
3  A100     5
4  B100     6
5  Z100     8
Answered By: jezrael

You can flatten your dataframe and manipulate index to get expected output:

out = (df.unstack().sort_index(level=1)
         .set_axis([f'{j}{i}' for i in df.index for j in df.columns])
         .rename_axis('var').rename('val').reset_index())

Output:

>>> out
    var  val
0    A1    3
1    B1    4
2    Z1    6
3  A100    5
4  B100    6
5  Z100    8
Answered By: Corralien