2014-04-21 3 views
16

다음 DataFrame을 사용하면 Pandas가 다른 인덱스 값에 이동 된 값을 할당하지 않고도 인덱스를 기반으로 "beyer"열을 어떻게 옮길 수 있습니까?멀티 인덱스로 팬더 DataFrame을 어떻게 전환합니까?

    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 

문제는 Paynter 마지막 ​​총잡이 (자신의 첫 번째 레코드)이 할당 된 베이어를 주어진 것입니다 ... 생산하고 있습니다. 대신에 나는 그것이 개별적으로 각 그룹으로의 전환 신청 ... 같이

    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 

답변

25

사용 groupby/shift을 가고 싶어 : (. 감사합니다 제프이 단순화를 지적를)

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 

이있는 경우 다중 색인 인 경우 시퀀스 또는 수준 이름을 groupby'slevel 매개 변수로 전달하여 둘 이상의 수준으로 그룹화 할 수 있습니다.

+0

완벽하게 작동했습니다. 고맙습니다! – TravisVOX

+0

우리는 이것을 요리 책에 추가해야한다고 생각합니다. 기회가있을 때 홍보 할 수 있습니까? – Jeff

+0

왜 던져 버릴까요? ValueError : 중복 축에서 다시 색인 할 수 없습니다. – TravisVOX

관련 문제