2016-08-04 30 views
5

Bir MultiIndex DataFrame ikincil düzeyden birden çok değerle dilimlemek istiyorum. Örneğin, aşağıdaki DataFrame içinde: beri,MultiIndex DataFrame'in belirtilen bir düzeyden birden çok değerle dilimlenmesi

  val1 val2 
ind1 ind2    
1 6  10  8 
2 7  20  6 
5 10  60  0 

En varsayımsal seçenek .xs için birden argümanları geçmek olacaktır:

   val1 val2 
ind1 ind2 ind3    
1 6 s1  10  8 
2 7 s1  20  6 
3 8 s2  30  4 
4 9 s2  50  2 
5 10 s3  60  0 

Ben ind3 == s1veyaind3 == s3 olduğu tek satır dilim isteyen İstenen level'u açıkça belirtmek mümkündür.

elimden açıkçası Concat tüm dilimlenmiş-by-tek-değer DataFrames:

In[2]: pd.concat([df.xs('s1',level=2), df.xs('s3',level=2)]) 
Out[2]: 
      val1 val2 
ind1 ind2    
1 6  10  8 
2 7  20  6 
5 10  60  0 

Ama fazla 2 değerlerini kullanırken o kadar okunabilir sıkıcı ve değil (a)ve (b) Büyük DataFrames için oldukça ağırdır (veya varsa çok değerli bir dilimleme seçeneğinden en az ağırdır).

import pandas as pd 
df = pd.DataFrame({'ind1':[1,2,3,4,5], 'ind2':[6,7,8,9,10], 'ind3':['s1','s1','s2','s2','s3'], 'val1':[10,20,30,50,60], 'val2':[8,6,4,2,0]}).set_index(['ind1','ind2','ind3']) 

cevap