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