大熊猫-根据变量将值添加到列中,并将标题添加到mutltiindex(header)中

时间:2019-12-05 15:55:04

标签: python pandas multi-index

首先,我创建了一个熊猫多索引数据框(df)。其次,我有变量和一个数据帧(df_TV)。我想根据变量“ TV_Object”,“ TV_weight”,“ TV_room”和索引将值从“ df_TV”添加到“ df”。另外,我想在多索引的最低级别添加“电视”。

创建多索引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

创建变量和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  

我得到的是,这些值将通过索引a,b,c等相加,并且在下面有一个新的多索引标题“ TV” “客厅”后跟数值。感谢您的想法/解决方案和您的时间!

2 个答案:

答案 0 :(得分:1)

这里是:

解决方案

df[(TV_Object, TV_weight, TV_room)] = df_TV['TV']

输出

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

答案 1 :(得分:0)

另一个解决您的3级要求的答案。您需要更改初始数据框:

数据

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

解决方案

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']

输出

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