2016-06-27 11 views
6

dataframe. İkinci indeksdeki seviye sayısı, ilk endeksin değerine bağlı olarak değişir. pandas multi index documentation'dan geçtim ama bunu yapan hiçbir şey bulamadım. ÖrneğinErişim geçen elemanlar İlk dizinin tüm değerleri için ikinci endeksinin <strong>son</strong> eleman erişmek istediğiniz bir <code>multi index</code> pandalar dataframe olarak

, aşağıda veri çerçeve için:

arrays = [ ['bar', 'bar', 'baz', 'foo', 'foo', 'foo', 'qux'], 
      ['one', 'two', 'one', 'one', 'two', 'three', 'one']] 
tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
df = pd.DataFrame(np.random.randn(7, 3), index=index, columns=['A', 'B', 'C']) 
df 
       A   B   C 
first second 
bar one  0.289163 -0.464633 -0.060487 
     two  0.224442 0.177609 2.156436 
baz one -0.262329 -0.248384 0.925580 
foo one  0.051350 0.452014 0.206809 
     two  2.757255 -0.739196 0.183735 
     three -0.064909 -0.963130 1.364771 
qux one -1.330857 1.881588 -0.262170 

Almak istediğim:

    A   B   C 
first second 
bar two  0.224442 0.177609 2.156436 
baz one -0.262329 -0.248384 0.925580 
foo three -0.064909 -0.963130 1.364771 
qux one -1.330857 1.881588 -0.262170 

ile çalışıyorum dataframes10M üzerinde hatları yüzden açık döngü kaçınmak istiyoruz.

+0

Sen (= 'ilk' seviyesini) 'yapmak df.groupby olabilir son()' – EdChum

cevap

6

Kullanım groupbytail ile:

print (df.groupby(level='first').tail(1)) 
        A   B   C 
first second        
bar two  0.053054 -0.555819 0.589998 
baz one -0.868676 1.293633 1.339474 
foo three 0.407454 0.738872 1.811894 
qux one -0.346014 -1.491270 0.446772 

last çünkü level second kaybetti.

print (df.groupby(level='first').last())   
       A   B   C 
first        
bar 0.053054 -0.555819 0.589998 
baz -0.868676 1.293633 1.339474 
foo 0.407454 0.738872 1.811894 
qux -0.346014 -1.491270 0.446772 
İlgili konular