import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame([['a',1,123], ['a',2,345], ['b',1,678], ['a',1,345]]).set_index([0,1])
df
2 | ||
---|---|---|
0 | 1 | |
a | 1 | 123 |
2 | 345 | |
b | 1 | 678 |
a | 1 | 345 |
df = pd.DataFrame({'row': [0, 1, 2],
'One_X': [1.1, 1.1, 1.1],
'One_Y': [1.2, 1.2, 1.2],
'Two_X': [1.11, 1.11, 1.11],
'Two_Y': [1.22, 1.22, 1.22]})
df
row | One_X | One_Y | Two_X | Two_Y | |
---|---|---|---|---|---|
0 | 0 | 1.1 | 1.2 | 1.11 | 1.22 |
1 | 1 | 1.1 | 1.2 | 1.11 | 1.22 |
2 | 2 | 1.1 | 1.2 | 1.11 | 1.22 |
df = df.set_index('row'); df
One_X | One_Y | Two_X | Two_Y | |
---|---|---|---|---|
row | ||||
0 | 1.1 | 1.2 | 1.11 | 1.22 |
1 | 1.1 | 1.2 | 1.11 | 1.22 |
2 | 1.1 | 1.2 | 1.11 | 1.22 |
df.columns = pd.MultiIndex.from_tuples([tuple(c.split('_'))
for c in df.columns])
df
One | Two | |||
---|---|---|---|---|
X | Y | X | Y | |
row | ||||
0 | 1.1 | 1.2 | 1.11 | 1.22 |
1 | 1.1 | 1.2 | 1.11 | 1.22 |
2 | 1.1 | 1.2 | 1.11 | 1.22 |
df = df.stack(0).reset_index(1); df
level_1 | X | Y | |
---|---|---|---|
row | |||
0 | One | 1.10 | 1.20 |
0 | Two | 1.11 | 1.22 |
1 | One | 1.10 | 1.20 |
1 | Two | 1.11 | 1.22 |
2 | One | 1.10 | 1.20 |
2 | Two | 1.11 | 1.22 |
df.columns = ['Sample', 'All_X', 'All_Y']; df
Sample | All_X | All_Y | |
---|---|---|---|
row | |||
0 | One | 1.10 | 1.20 |
0 | Two | 1.11 | 1.22 |
1 | One | 1.10 | 1.20 |
1 | Two | 1.11 | 1.22 |
2 | One | 1.10 | 1.20 |
2 | Two | 1.11 | 1.22 |
cols = pd.MultiIndex.from_tuples([(x, y) for x in ['A', 'B', 'C']
for y in ['O', 'I']])
df = pd.DataFrame(np.random.randn(2, 6), index=['n', 'm'], columns=cols)
df
A | B | C | ||||
---|---|---|---|---|---|---|
O | I | O | I | O | I | |
n | 1.764052 | 0.400157 | 0.978738 | 2.240893 | 1.867558 | -0.977278 |
m | 0.950088 | -0.151357 | -0.103219 | 0.410599 | 0.144044 | 1.454274 |
df = df.div(df['C'], level=1); df
A | B | C | ||||
---|---|---|---|---|---|---|
O | I | O | I | O | I | |
n | 0.944577 | -0.409461 | 0.524074 | -2.292995 | 1.0 | 1.0 |
m | 6.595840 | -0.104078 | -0.716581 | 0.282339 | 1.0 | 1.0 |
coords = [('AA', 'one'), ('AA', 'six'), ('BB', 'one'), ('BB', 'two'),
('BB', 'six')]
index = pd.MultiIndex.from_tuples(coords)
df = pd.DataFrame([11, 22, 33, 44, 55], index, ['MyData']); df
MyData | ||
---|---|---|
AA | one | 11 |
six | 22 | |
BB | one | 33 |
two | 44 | |
six | 55 |
import itertools
index = list(itertools.product(['Ada', 'Quinn', 'Violet'],
['Comp', 'Math', 'Sci']))
headr = list(itertools.product(['Exams', 'Labs'], ['I', 'II']))
indx = pd.MultiIndex.from_tuples(index, names=['Student', 'Course'])
cols = pd.MultiIndex.from_tuples(headr) # Notice these are un-named
data = [[70 + x + y + (x * y) % 3 for x in range(4)] for y in range(9)]
df = pd.DataFrame(data, indx, cols); df
Exams | Labs | ||||
---|---|---|---|---|---|
I | II | I | II | ||
Student | Course | ||||
Ada | Comp | 70 | 71 | 72 | 73 |
Math | 71 | 73 | 75 | 74 | |
Sci | 72 | 75 | 75 | 75 | |
Quinn | Comp | 73 | 74 | 75 | 76 |
Math | 74 | 76 | 78 | 77 | |
Sci | 75 | 78 | 78 | 78 | |
Violet | Comp | 76 | 77 | 78 | 79 |
Math | 77 | 79 | 81 | 80 | |
Sci | 78 | 81 | 81 | 81 |