当一个是多级索引而另一个不是多级索引时,如何求和两个不同形状的数据帧的值



我有以下数据帧:eta1.shape = (8004, 29), eta2.shape = (138,)

eta1= 
id/uniqueID      var0    var1    var2    var3    var4 ...  var28
5171/0            10.0    2.8     0.0     5.0     1.0  ...  9.4  
5171/1            40.9    2.5     3.4     4.5     1.3  ...  7.7  
5171/2            60.7    3.1     5.2     6.6     3.4  ...  1.0
...
5171/57           0.5     1.3     5.1     0.5     0.2  ...  0.4
4567/0            1.5     2.0     1.0     4.5     0.1  ...  0.4  
4567/1            4.4     2.0     1.3     6.4     0.1  ...  3.3  
4567/2            6.3     3.0     1.5     7.6     1.6  ...  1.6
...
4567/57           0.7     1.4     1.4     0.3     4.2  ...  1.7
... 
9584/0            0.3     2.6     0.0     5.2     1.6  ...  9.7  
9584/1            0.5     1.2     8.3     3.4     1.3  ...  1.7  
9584/2            0.7     3.0     5.6     6.6     3.0  ...  1.0
...
9584/57           0.7     1.3     0.1     0.0     2.0  ...  1.7
eta2= 
id     var28
5171    67.0
4567    98.9
9584    47.7
...
8707    56.3 

eta2中,每个id有一个值。我需要将eta2中每个id的值添加到具有相同ideta1的所有列中,如eta = eta1+eta2。例如,id=5171的结果应该如下:

eta.loc[5171] = 
id/uniqueID       var0         var1         ...  var28
5171/0            10.0+67.0    2.8+67.0     ...  9.4+67.0  
5171/1            40.9+67.0    2.5+67.0     ...  7.7+67.0  
5171/2            60.7+67.0    3.1+67.0     ...  1.0+67.0
...
5171/57           0.5+67.0     1.3+67.0     ...  0.4+67.0

eta = eta1.add(eta2)求和会得到错误的结果,因为它们没有相同的水平。我不能删除这些级别,我需要它们来进行以后的计算。所以我试着给eta2添加一个新的级别,然后求和,但我得到了这个错误:

eta2['uniq_id'] = eta2.groupby('id').cumcount()
eta2 = eta2.set_index(['uniq_id'], append=True)
eta = eta1.add(eta2, level=0)
error: typeError: Join one level between two MultiIndex objects is ambiguous 

我该怎么算这笔钱?

使用DataFrame.addSeries以及eta2['var28']axis=0level=0参数:

eta = eta1.add(eta2['var28'], axis=0, level=0)
print (eta)
var0   var1   var2   var3   var4  var28
id   uniqueID                                          
5171 0          77.0   69.8   67.0   72.0   68.0   76.4
1         107.9   69.5   70.4   71.5   68.3   74.7
2         127.7   70.1   72.2   73.6   70.4   68.0
57         67.5   68.3   72.1   67.5   67.2   67.4
4567 0         100.4  100.9   99.9  103.4   99.0   99.3
1         103.3  100.9  100.2  105.3   99.0  102.2
2         105.2  101.9  100.4  106.5  100.5  100.5
57         99.6  100.3  100.3   99.2  103.1  100.6
9584 0          48.0   50.3   47.7   52.9   49.3   57.4
1          48.2   48.9   56.0   51.1   49.0   49.4
2          48.4   50.7   53.3   54.3   50.7   48.7
57         48.4   49.0   47.8   47.7   49.7   49.4

如果添加累计计数MultiIndex:

eta2['uniq_id'] = eta2.groupby('id').cumcount()
eta2 = eta2.set_index(['uniq_id'], append=True)
eta = eta1.add(eta2['var28'], axis=0)
print (eta)
var0   var1  var2   var3  var4  var28
id   uniqueID uniq_id                                        
4567 0        0        100.4  100.9  99.9  103.4  99.0   99.3
1        0          NaN    NaN   NaN    NaN   NaN    NaN
2        0          NaN    NaN   NaN    NaN   NaN    NaN
57       0          NaN    NaN   NaN    NaN   NaN    NaN
5171 0        0         77.0   69.8  67.0   72.0  68.0   76.4
1        0          NaN    NaN   NaN    NaN   NaN    NaN
2        0          NaN    NaN   NaN    NaN   NaN    NaN
57       0          NaN    NaN   NaN    NaN   NaN    NaN
8707 NaN      0          NaN    NaN   NaN    NaN   NaN    NaN
9584 0        0         48.0   50.3  47.7   52.9  49.3   57.4
1        0          NaN    NaN   NaN    NaN   NaN    NaN
2        0          NaN    NaN   NaN    NaN   NaN    NaN
57       0          NaN    NaN   NaN    NaN   NaN    NaN

最新更新