Pandas将值添加到基于变量的multiIndex(header)中,并带有标题

2024-10-03 13:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我创建了一个多索引数据帧(df)。第二,我有变量和数据帧(dfïTV)。我喜欢根据变量“TV\u Object”、“TV\u weight”、“TV\u room”和索引将“df\u TV”中的值添加到“df”中。另外,我喜欢在多重索引的最低级别添加“TV”。你知道吗

创建多索引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\u 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”在下面 其次是“客厅”的价值观。感谢您的想法/解决方案和宝贵时间!你知道吗


Tags: 数据dataframedfindexobjectdevicetvelectrical
2条回答

另一个解决你的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

在这里:

解决方案

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

相关问题 更多 >