파이썬 넘파이 잘 다루시는분 np.unique 질문드립니다.

조회수 398회

엑셀 파일을 가지고 있는데 중복된 행을 지우는데 생각보다 조건이 많아서 애를 먹고 있습니다.

이미지

1.데이터가 대략 이렇게 생겼는데 csv 파일로 변환하여 pandas를 이용하여 파일을 불러와 넘파이 데이터로 바꾸는데 성공하였습니다. 이를 data 라고 하겠습니다.

2.다음으로 뒤에서 두번째 열에서 값이 20180101 이상 20180630 이하인 행만 따로 np.delete라는 함수를 이용하여 추출하였고(여기까지 하면 shape이 (489,8) 가 됩니다.) 이렇게 만들어진 데이터를 data1 라고 하겠습니다.

3.여기서 넘파이 인덱싱 기능을 이용하여 station 열만 따로 떼온 후, np.unique 함수를 이용하여 return_index=True 를 이용하여 idx 까지 만들었습니다. 예를 들어서 station에서 맨 첫번쨰 ADJ가 3개 있으므로 맨 첫번째 위치인 0 그리고 그 다음인 BBK가 3개 있으므로 BBK의 맨 첫번째 위치인 3 등이 기록된 1d-array가 만들어집니다. (이렇게 하여 만들어진 1d-array는 길이가 144가 됩니다.) 이렇게 만들어진 1d-array를 idx 라고 하겠습니다.

4.그렇게하여 unique한 위치 정보를 담고 있는 idx를 이용하여 2번 작업을 통해 만들었던 data1 의 행을 따로 추출하고 싶습니다. 예를 들어서 idx = [0,3,6,...] 라고 한다면 idx의 숫자에 맞는 행 위치 즉, data1의 0번째 행, 3번째 행, 6번째행 등을 찾아서 그 행의 정보를 추출해서 (144,8)의 형태로 만들 수 있나요?

도와주시면 감사하겠습니다.

1 답변

  • >>> df = pd.DataFrame({"station":["AJD", "AJD", "BBK", "BBK"],
               "channel":["HGE", "HGN", "HGE", "HGE"],
               "network":["KG", "KG", "KG", "KG"],
               "lat":[34.74, 34.74, 35.57, 35.57],
               "lon":[126.12, 126.12, 129.43, 129.43],
               "ele":[100, 100, 100, 100],
               "st":[20140101, 20140101, 20170131, 20140101],
               "end":[99991231, 99991231, 99991231, 20170130]})
    >>> df
      station channel network    lat     lon  ele        st       end
    0     AJD     HGE      KG  34.74  126.12  100  20140101  99991231
    1     AJD     HGN      KG  34.74  126.12  100  20140101  99991231
    2     BBK     HGE      KG  35.57  129.43  100  20170131  99991231
    3     BBK     HGE      KG  35.57  129.43  100  20140101  20170130
    >>> df.groupby("station").first()
            channel network    lat     lon  ele        st       end
    station                                                        
    AJD         HGE      KG  34.74  126.12  100  20140101  99991231
    BBK         HGE      KG  35.57  129.43  100  20170131  99991231
    >>> df.groupby("station").first().reset_index()
      station channel network    lat     lon  ele        st       end
    0     AJD     HGE      KG  34.74  126.12  100  20140101  99991231
    1     BBK     HGE      KG  35.57  129.43  100  20170131  99991231
    

    이런 걸 원하시는 건가요?

    • 비슷하지만 아닌거 같네요 답변 감사드립니다. shnam 2021.9.24 10:47

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)