본문 바로가기
파이썬

파이썬 Pandas : 그룹 내에서 한 행씩 값 아래로 이동

by º기록 2020. 12. 6.
반응형

Pandas 데이터 프레임이 있고 값이 다른 열의 값인 새 열을 만들고 한 행 아래로 이동하려고합니다. 마지막 행에는 NaN이 표시되어야합니다.

문제는 각 그룹의 마지막 행에 NaN이 표시되는 그룹별로이 작업을 수행하고 싶다는 것입니다. 그룹의 마지막 행이 데이터 프레임에서 인접한 그룹의 값을 "훔치지"않습니다.

내가 시도한 구현은 매우 부끄럽게 깨져서 근본적인 것을 분명히 오해하고 있습니다.

df['B_shifted'] = df.groupby(['A'])['B'].transform(lambda x:x.values[1:])

 

해결 방법

 

Shift는 group by 절의 출력에서 ​​작동합니다.

>>> df = pandas.DataFrame(numpy.random.randint(1,3, (10,5)), columns=['a','b','c','d','e'])
>>> df
   a  b  c  d  e
0  2  1  2  1  1
1  2  1  1  1  1
2  1  2  2  1  2
3  1  2  1  1  2
4  2  2  1  1  2
5  2  2  2  2  1
6  2  2  1  1  1
7  2  2  2  1  1
8  2  2  2  2  1
9  2  2  2  2  1


for k, v in df.groupby('a'):
    print k
    print 'normal'
    print v
    print 'shifted'
    print v.shift(1)

1
normal
   a  b  c  d  e
2  1  2  2  1  2
3  1  2  1  1  2
shifted
    a   b   c   d   e
2 NaN NaN NaN NaN NaN
3   1   2   2   1   2
2
normal
   a  b  c  d  e
0  2  1  2  1  1
1  2  1  1  1  1
4  2  2  1  1  2
5  2  2  2  2  1
6  2  2  1  1  1
7  2  2  2  1  1
8  2  2  2  2  1
9  2  2  2  2  1
shifted
    a   b   c   d   e
0 NaN NaN NaN NaN NaN
1   2   1   2   1   1
4   2   1   1   1   1
5   2   2   1   1   2
6   2   2   2   2   1
7   2   2   1   1   1
8   2   2   2   1   1
9   2   2   2   2   1

 

참조 페이지 https://stackoverflow.com/questions/26280345

 

 

반응형

댓글