Skip to content
Advertisement

Transpose a single column in DF

The table I have

{'name': {0: 'Result 1',
  1: 'Result 2',
  2: 'Result 1',
  3: 'Result 2'},
 'value': {0: '255.00', 1: '260.00', 2: '255.00', 3: '260.00'},
 'Result 3': {0: 325, 1: 325, 2: 285, 3: 285},
 'batchnumber': {0: '59530', 1: '59530', 2: '59534', 3: '59534'}}

The transpose I want to do is single column transpose

index name value batchnumber
0 Result 1 255.00 59534
1 Result 2 260.00 59534
2 Result 3 285.00 59534
3 Result 1 255.00 59530
4 Result 2 260.00 59530
5 Result 3 325.00 59530

I tried pivot

df.pivot(index='Result 3', columns='name', values='batchnumber')
df = df.transpose()

Advertisement

Answer

You can pivot_wider then melt. In this case, you get the same results but rather unmatched rows

df.pivot(['batchnumber', 'Result 3'],'name', 'value').reset_index().melt('batchnumber')

   batchnumber      name  value
0        59530  Result 3  325.0
1        59534  Result 3  285.0
2        59530  Result 1  255.0
3        59534  Result 1  255.0
4        59530  Result 2  260.0
5        59534  Result 2  260.0

You could sort before you melt:

(df.pivot(['batchnumber', 'Result 3'],'name', 'value')
   .reset_index()
   .sort_index(axis=1)
   .melt('batchnumber'))

   batchnumber      name  value
0        59530  Result 1  255.0
1        59534  Result 1  255.0
2        59530  Result 2  260.0
3        59534  Result 2  260.0
4        59530  Result 3  325.0
5        59534  Result 3  285.0
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement