Reputation: 1131
First, I created a pandas multi-index data frame (df). Second, I have variables and a data frame (df_TV). I like to add values from "df_TV" into "df" based on the variables "TV_Object", "TV_weight", "TV_room" and the index. Also, I like to add "TV" at the lowest level of the multi-index.
Creates the multi-index df:
header = pd.MultiIndex.from_product([
['Electrical Device', 'piece of furniture'],
['>10 Kilogramm','<10 Kilogramm'],
['Kitchen', 'Living Room','Bathroom'],
], names=['Object','weight', 'room'])
df = pd.DataFrame(index=['a','b','c','d','e'], columns=header)
df
Create the variables and df_TV:
TV_Object = 'Electrical Device'
TV_weight = '>10 Kilogramm'
TV_room = 'Living Room'
df_TV = pd.DataFrame(np.random.randn(5,1), index=['a','b','c','d','e'], columns=['TV'])
df_TV
I obtain, that the values will be added by index a,b,c, etc. and a new multi-index-header "TV" is under "Living Room" followed by the values. Thanks for ideas/solutions and your time!
Upvotes: 1
Views: 444
Reputation: 1018
Another answer to address your level 3 request. You'll want to change your initial dataframe:
Data
header = pd.MultiIndex.from_product([
['Electrical Device', 'piece of furniture'],
['>10 Kilogramm','<10 Kilogramm'],
['Kitchen', 'Living Room','Bathroom'],
['TV']
], names=['Object','weight', 'room', 'device'])
df = pd.DataFrame(index=['a','b','c','d','e'], columns=header)
print(df.to_string())
Object Electrical Device piece of furniture
weight >10 Kilogramm <10 Kilogramm >10 Kilogramm <10 Kilogramm
room Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom
device TV TV TV TV TV TV TV TV TV TV TV TV
a NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
d NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
e NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Solution
TV_Object = 'Electrical Device'
TV_weight = '>10 Kilogramm'
TV_room = 'Living Room'
TV_device = 'TV'
df_TV = pd.DataFrame(np.random.randn(5,1), index=['a','b','c','d','e'], columns=['TV'])
df[(TV_Object, TV_weight, TV_room, TV_device)] = df_TV['TV']
Output
print(df.to_string())
Object Electrical Device piece of furniture
weight >10 Kilogramm <10 Kilogramm >10 Kilogramm <10 Kilogramm
room Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom
device TV TV TV TV TV TV TV TV TV TV TV TV
a NaN -0.599330 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
b NaN 0.022242 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
c NaN -0.214219 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
d NaN 2.121647 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
e NaN -0.732355 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Upvotes: 0
Reputation: 1018
Here it is:
Solution
df[(TV_Object, TV_weight, TV_room)] = df_TV['TV']
Output
print(df.to_string())
Object Electrical Device piece of furniture
weight >10 Kilogramm <10 Kilogramm >10 Kilogramm <10 Kilogramm
room Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom Kitchen Living Room Bathroom
a NaN 0.495962 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
b NaN -1.040295 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
c NaN -0.653766 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
d NaN -0.152420 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
e NaN 0.950787 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
Upvotes: 2