我有以下数据帧: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
的值添加到具有相同id
的eta1
的所有列中,如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.add
和Series
以及eta2['var28']
和axis=0
level=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