판다스 - 특정 컬럼의 몇개의 값만 다른 컬럼으로 이동 후 데이터프레임...

판다스 - 특정 컬럼의 몇개의 값만 다른 컬럼으로 이동 후 데이터프레임...

작성일 2020.06.24댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요. 파이썬 초보입니다.
특정 컬럼의 몇개의 값만 다른 컬럼으로 이동 후 데이터프레임 정렬하려고 하는데, 잘 안되네요.
이해를 돕기 위해 아래에 작업 전(원본) 후(결과) 를 첨부했습니다.

설명을 드리면 
처음 3행 값 처음 열에 두고, 4~6행 값을 옆 열에 넣습니다.(인덱스 동일)
4~6행 값의 이동에 의해 비어진 행은 삭제합니다.
동일하게 7~8행 값은 처음 행에 두고, 10~12행 값을 옆 열의 4~6행 값 아래에 이동합니다.
원래 하고자 하는 작업은 첨부 파일보다 훨씬 긴 데이터의 연속인데요(동일한 인덱스를 가진 값),
간단한 예제 먼저 해결이 되면 응용이 될것 같아 글 올립니다.
고수분들 한수 부탁드립니다.

              
<작업 전(원본)>             <작업 후(결과)>


#판다스 설치 #판다스 데이터프레임 #판다스 groupby #판다스 컬럼명 변경 #판다스 concat #판다스 열 삭제 #판다스 loc #판다스 데이터프레임 만들기 #판다스 drop #판다스 iloc

profile_image 익명 작성일 -

똑같은 데이터프레임을 만듭니다.

>>> data = pd.DataFrame( { 'avg' : list(range(1,13)) }, index=[-360, 0, 360]*4 ) >>> data avg -360 1 0 2 360 3 -360 4 0 5 360 6 -360 7 0 8 360 9 -360 10 0 11 360 12

모양을 바꾸어서 저장할 데이터프레임 df를 원본 data를 카피해서 만듭니다. 그리고 V2 열을 추가합니다.

>>> df = data.copy() >>> df['V2'] = df.avg

l2열을 V2를 기반으로 만드는데, shift 메소드를 활용해서 위쪽으로 3칸 끌어 올려서 만듭니다. 맨 아래 3줄의 값은 NaN이 됩니다.

>>> df['l2'] = df.V2.shift(-3) >>> df avg V2 l2 -360 1 1 4.0 0 2 2 5.0 360 3 3 6.0 -360 4 4 7.0 0 5 5 8.0 360 6 6 9.0 -360 7 7 10.0 0 8 8 11.0 360 9 9 12.0 -360 10 10 NaN 0 11 11 NaN 360 12 12 NaN

데이터 타입이 float으로 바뀌네요. Nan 때문인 것 같습니다. NaN은 float type이거든요.

이제 0, 1, 2, 6, 7, 8번 행만 남기면 됩니다. 행 번호를 나타내는 리스트를 만들어 봅니다.

>>> [j for i in range(0, len(df), 6) for j in range(i, i+3) ] [0, 1, 2, 6, 7, 8]

이걸 합치면 끝납니다.

>>> df = df.iloc[[j for i in range(0, len(df), 6) for j in range(i, i+3) ]] >>> df avg V2 l2 -360 1 1 4.0 0 2 2 5.0 360 3 3 6.0 -360 7 7 10.0 0 8 8 11.0 360 9 9 12.0

데이터프레임 판다스 특정값 행 제거

데이터프레임 판다스 특정값 행 제거 질문드립니다 예를들어 abc 라는 컬럼의 (숫자)이 123, 456, 789 인 행들을 삭제하려고 할때 어떻게 작성하여야하나요?...

엑셀 VB) 특정 데이터 추출 다른...

... 않는데도 데이터 이동은 전혀 안 되더라구요.... ㅠㅠ 파일은 첨부했구요, 제가 만든... 아예 다른 코드를 만들어야 하는 거면 다른 코드를 알려주시면 감사하겠습니다.......

DB 같은 컬럼 값이 여러번 들어 올때..

... 해당 DBMS가 지원하는 특정 데이터타입을 사용한다.... 취미 컬럼몇개로 나눈다. 미리 최대갯수를... ^^ 그외 생각해보면 다른방법이 많이 있을껍니다. 다 일장일단이...

2개의 컬럼의 중복을 비교제거후에...

... 432 데이터 몇개가 위처럼 데어있을때 어떻게 쿼리를 짜야 123,000 789,333 의... 하시면 B컬럼과 이전 행의 B컬럼의 값이 다른 경우에는 조회가 될 것입니다.