2015-10-29 44 views
4

我有这样一个数据帧:大熊猫:计算了多指标

enter image description here

我想。减去像值:

enter image description here

减去

enter image description here

我试过至今(数据帧:http://pastebin.com/PydRHxcz):

index = pd.MultiIndex.from_tuples([key for key in dfdict], names = ['a','b','c','d']) 
dfl = pd.DataFrame([dfdict[key] for key in dfdict],index=index) 
dfl.columns = ['data'] 
dfl.sort(inplace=True) 
d = dfl.unstack(['a','b']) 

我可以这样做:

d[0:5] - d[0:5] 

而且我得到的所有值为零。

但如果我这样做:

d[0:5] - d[5:] 

我得到NaN的所有值。任何想法如何我可以执行这样的操作?

编辑:

什么工作是

dfl.unstack(['a','b'])['data'][5:] - dfl.unstack(['a','b'])['data'][0:5].values 

但感觉有点笨拙

回答

4

您可以使用loc来选择对应于第一级这样的一个标签的所有行:

In [8]: d.loc[0] 
Out[8]: 
      data              ... 
a   0.17          1.00 
b   0   5   10   500  0   5 
d 
0.0 11.098909 9.223784 8.003650 10.014445 13.231898 10.372040 
0.3 14.349606 11.420565 9.053073 10.252542 26.342501 25.219403 
0.5 1.336937 2.522929 3.875139 11.161803 3.168935 6.287555 
0.7 0.379158 1.061104 2.053024 12.358577 0.678352 2.133887 
1.0 0.210244 0.631631 1.457333 15.117805 0.292904 1.053916 

这样做减法看起来像:

In [11]: d.loc[0] - d.loc[1000] 
Out[11]: 
      data               ... 
a   0.17          1.00 
b   0   5   10  500   0   5 
d 
0.0 -3.870946 -3.239915 -3.504068 -0.722377 -2.335147 -2.460035 
0.3 -65.611418 -42.225811 -25.712668 -1.028758 -65.106473 -44.067692 
0.5 -84.494748 -55.186368 -34.184425 -1.619957 -89.356417 -69.008567 
0.7 -92.681688 -61.636548 -37.386604 -4.227343 -110.501219 -78.925078 
1.0 -101.071683 -61.758741 -37.080222 -3.081782 -103.779698 -80.337487 
+0

太容易了。我只花了一个小时玩耍。 – Moritz