首先,我创建了一个熊猫多索引数据框(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” “客厅”后跟数值。感谢您的想法/解决方案和您的时间!
答案 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