2016-04-12 8 views
1

Pandalarla çalışmaya başladım ve çok boyutlu dizinlere sahip matris dizileri seçiminde çok fazla sorun yaşıyorum.Çoklu dizin Etiketlere göre veri aralığı erişimi

aşağıdaki Dataframe imploc çağrıda:

In [197]: imploc 
Out[197]: 
            TotProd  TotDem  ProdCost   Price MinRes  MaxRes  Adjust 
Sector  Zone                          
1 BasicEmp 1 Downtown  5000.000000  0.000000 13272.885111 13272.885111  0.0 8.999999e+09 0.000000 
      2 Harlem Distri 800.000000  0.000000 11664.924939 11664.924939  0.0 8.999999e+09 0.000000 
      3 Beverly Garde 1100.000000  0.000000 11774.847614 11774.847614  0.0 8.999999e+09 0.000000 
2 ServEmp 1 Downtown  3499.999329 711.295166 12872.998776 12872.998776  0.0 8.999999e+09 -50.116985 
      2 Harlem Distri 699.999855 2024.319580 11448.578071 11448.578071  0.0 8.999999e+09 -47.460030 
      3 Beverly Garde 899.999870 2364.384277 11308.782766 11308.782766  0.0 8.999999e+09 -45.067730 
3 LowInc 1 Downtown  4000.000107 15627.176758 2575.848432 2575.848432  0.0 8.999999e+09 -47.760773 
      2 Harlem Distri 12999.999146 2725.641602 2302.787325 2302.787325  0.0 8.999999e+09 -62.273769 
      3 Beverly Garde 4999.998932 3647.179932 2501.744127 2501.744127  0.0 8.999999e+09 -62.095543 
4 HighInc 1 Downtown  1500.000504 11310.782227 3697.571092 3697.571092  0.0 8.999999e+09 -44.726818 
      2 Harlem Distri 3000.000977 2012.531128 3156.683334 3156.683334  0.0 8.999999e+09 -61.458027 
      3 Beverly Garde 11500.003662 2676.691895 3512.280696 3512.280696  0.0 8.999999e+09 -57.550457 
5 Land  1 Downtown   65.999985  65.999985 250000.000000 250000.000000 66.0 6.600000e+01 -8.102549 
      2 Harlem Distri 109.999794 109.999794 120000.000000 120000.000000 110.0 1.100000e+02 -23.183863 
      3 Beverly Garde 127.999893 127.999893 180000.000000 180000.000000 128.0 1.280000e+02 -22.268484 

biz endeksi baktığımızda şu var: O

In [198]:imploc.index 
Out[198]: 
MultiIndex(levels=[[u' 1 BasicEmp', u' 2 ServEmp', u' 3 LowInc', u' 4 HighInc', u' 5 Land'], [u' 1 Downtown', u' 2 Harlem Distri', u' 3 Beverly Garde']], 
      labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]], 
      names=[u'Sector', u'Zone']) 

, ben 2 seviyeleri çok isterim o multiindex var erişim sahibi olmak demek istediğim: [u' 1 BasicEmp', u' 2 ServEmp', u' 3 LowInc', u' 4 HighInc', u' 5 Land'] dış indeksi [0,1,2,3,4]'a eşdeğer olmalıdır ve iç dizin ['u' 1 Downtown', u' 2 Harlem Distri', u' 3 Beverly Garde'[0,1,2]'a eşdeğer olmalıdır.

Sorum şu ki, '[' 3 LowInc ',' 2 Harlem Distri ']' satırını kurtarmanın, ancak numpy'nin yaptığı gibi numaralandırılmış indeksleri kullanmanın bir yolu var. .ix yöntemi, iki boyutlu dizine yerine 0'dan 14'e endekslenir.

Yapmam isteriz:

>>imploc[2,1] 
>>12999.999146 2725.641602 2302.787325 2302.787325  0.0 8.999999e+09 -62.273769 

yerine:

In [199]:imploc.ix[7] 
Out[199]: 
TotProd  1.300000e+04 
TotDem  2.725642e+03 
ProdCost 2.302787e+03 
Price  2.302787e+03 
MinRes  0.000000e+00 
MaxRes  8.999999e+09 
Adjust  -6.227377e+01 
Name: (3 LowInc, 2 Harlem Distri), dtype: float6 

cevap

0

Sen imploc[(' 3 LowInc', ' 2 Harlem Distri')]

+0

Evet gibi bir çok indeks satırı erişebilir, bu, yapmak istediğim şeydir ancak tamsayılarla. Tek cevabın tamsayıların indekslerini değiştirdiğini düşünüyorum. – tcapelle