2015-10-29 210 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