2014-04-21 20 views
16

Aşağıdaki DataFrame ile, "beyer" sütunu, pikseller kaydırılmış değeri farklı bir dizin değerine atamadan dizine dayalı olarak nasıl değiştirebilirim?Pandas DataFrame'i bir çok dizinli olarak nasıl değiştirirsiniz?

    line_date line_race beyer 
horse           
Last Gunfighter 2013-09-28   10  99 
Last Gunfighter 2013-08-18   10 102 
Last Gunfighter 2013-07-06   8 103 
..... 
Paynter   2013-09-28   10 103 
Paynter   2013-08-31   10  88 
Paynter   2013-07-27   8 100 

df['beyer'].shift(1)

    line_date line_race beyer beyer_shifted 
horse              
Last Gunfighter 2013-09-28   10  99   NaN 
Last Gunfighter 2013-08-18   10 102    99 
Last Gunfighter 2013-07-06   8 103   102 
..... 
Paynter   2013-09-28   10 103    71 
Paynter   2013-08-31   10  88   103 
Paynter   2013-07-27   8 100    88 

sorun Paynter Son Gunfighter (ilk kayıt) atandı bir Beyer verildi olmasıdır ... üretir. Bunun yerine tek tek her gruba kayması uygulamak için ... böyle

    line_date line_race beyer beyer_shifted 
horse              
Last Gunfighter 2013-09-28   10  99   NaN 
Last Gunfighter 2013-08-18   10 102    99 
Last Gunfighter 2013-07-06   8 103   102 
..... 
Paynter   2013-09-28   10 103   NaN 
Paynter   2013-08-31   10  88   103 
Paynter   2013-07-27   8 100    88 

cevap

25

kullanın groupby/shift gitmek istiyorum: (. Teşekkürler Jeff bu basitleştirilmesi işaret için)

In [60]: df['beyer_shifted'] = df.groupby(level=0)['beyer'].shift(1); df 
Out[61]: 
        line_date line_race beyer beyer_shifted 
Last Gunfighter 2013-09-28   10  99   NaN 
Last Gunfighter 2013-08-18   10 102    99 
Last Gunfighter 2013-07-06   8 103   102 
Paynter   2013-09-28   10 103   NaN 
Paynter   2013-08-31   10  88   103 
Paynter   2013-07-27   8 100    88 

varsa Bir çoklu dizin, ints dizisini geçirerek veya düzey adlarını groupby'slevel parametresine geçirerek birden fazla düzeye kadar gruplayabilirsiniz.

+0

Bu mükemmel bir şekilde çalıştı. Teşekkür ederim! – TravisVOX

+0

Sanırım bunu yemek kitabına eklemeliyiz. Bir şansın olduğunda bir PR yapabilir misin? – Jeff

+0

Neden bunu kusurdu ... ValueError: yinelenen bir eksenden yeniden dizine eklenemiyor – TravisVOX

İlgili konular