I have the following dataframe:
import pandas as pd
idx = pd.IndexSlice
data = {'Col1': [4, 5, 6, 7, 8], 'Col2': [1, 2, 3, 4, 5], 'Col3': [10, 9, 8, 7, 6],
'Col4': [5, 8, 9, 3, 10], 'Col5': [7, 6, 4, 5, 8], 'Col6': [4, 5, 6, 7, 8],
'Col7': [5, 8, 54, 3, 10], 'Col8': [7, 6, 32, 5, 8], 'Col9': [4, 5, 2, 23, 8], 'Col10': [13, 5, 6, 15, 8]}
col = pd.MultiIndex.from_tuples([('Monday', 'Water', 'Cold'), ('Monday', 'Water', 'Hot'),
('Monday', 'Ice', 'Cold'), ('Monday', 'Ice', 'Hot'), ('Monday', 'Earth', '-'),
('Tuesday', 'Water', 'Cold'), ('Tuesday', 'Water', 'Hot'),
('Tuesday', 'Ice', 'Cold'), ('Tuesday', 'Ice', 'Hot'), ('Tuesday', 'Earth', '-')])
df = pd.DataFrame(data)
df.columns = col
I would like to do the following operation Element which should do the following operations:
df[('Monday', 'Element', 'Cold')] = df[('Monday', 'Ice', 'Cold')] - df[('Monday', 'Earth', '-')]
df[('Monday', 'Element', 'Hot')] = df[('Monday', 'Ice', 'Hot')] - df[('Monday', 'Earth', '-')]
df[('Tuesday', 'Element', 'Hot')] = df[('Tuesday', 'Ice', 'Hot')] - df[('Tuesday', 'Earth', '-')]
df[('Tuesday', 'Element', 'Cold')] = df[('Tuesday', 'Ice', 'Cold')] - df[('Tuesday', 'Earth', '-')]
For every available level of Ice, in that case Cold and Hot, it deducts the - level of Earth
Desired output:
Monday Tuesday Monday Tuesday
Water Ice Earth Water Ice Earth Element Element
Cold Hot Cold Hot - Cold Hot Cold Hot - Cold Hot Hot Cold
0 4 1 10 5 7 4 5 7 4 13 3 -2 -9 -6
1 5 2 9 8 6 5 8 6 5 5 3 2 0 1
2 6 3 8 9 4 6 54 32 2 6 4 5 -4 26
3 7 4 7 3 5 7 3 5 23 15 2 -2 8 -10
4 8 5 6 10 8 8 10 8 8 8 -2 2 0 0