복붙노트

[PYTHON] 멀티 인덱스로 팬더 DataFrame을 어떻게 이동합니까?

PYTHON

멀티 인덱스로 팬더 DataFrame을 어떻게 이동합니까?

다음 DataFrame에서 어떻게 Pandas가 다른 인덱스 값에 이동 된 값을 할당하지 않고도 인덱스를 기반으로 "beyer"열을 이동할 수 있습니까?

                  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']. 교대 (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에게 Last Gunfighter (그의 첫 번째 기록)가 배정되었다는 beyer가 주어 졌다는 것입니다. 대신 나는 그것이 이렇게되기를 원해.

                  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

해결법

  1. ==============================

    1.groupby / shift를 사용하여 각 그룹에 개별적으로 이동을 적용하십시오 (이 단순화를 지적한 Jeff에게 감사드립니다).

    groupby / shift를 사용하여 각 그룹에 개별적으로 이동을 적용하십시오 (이 단순화를 지적한 Jeff에게 감사드립니다).

    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
    

    멀티 인덱스가있는 경우 일련의 int 또는 레벨 이름을 groupby의 level 매개 변수에 전달하여 둘 이상의 레벨로 그룹화 할 수 있습니다.

  2. from https://stackoverflow.com/questions/23198053/how-do-you-shift-pandas-dataframe-with-a-multiindex by cc-by-sa and MIT license