판다스 두개의 다른 DF과 비교하여, 동일한 길이의 다른 column의 값을 집어 넣는 방법

조회수 676회

예를 들어, 아래의 데이터와,

gnr_name    gnrOneHot
0 발라드 0
1 pop 1
2 80 2

아래의 데이터를 비교하여,

0 [발라드]
1 [pop, 회상]
2 [까페, 잔잔한]

아래 처럼 바꾸고 싶습니다.

한번에 가능한 방법이 없을까요?

0 [0]
1 [1, 23]
2 [45, 56]

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    더 간단한 방법이 있을 것 같은데, 좀 무식하게,

    1. df 를 iterrows 하면서, for 문으로 name-index map (dict)을 하나 만들었고,
    2. 만든 맵으로 리스트의 각 원소를 매핑하는 lambda 함수를, 데이터시리즈에 apply 하였습니다.
    >>> import pandas as pd
    >>> df = pd.DataFrame({"name":["발", "팝", "팔"], "onehot":[0,1,2]})
    >>> df
      name  onehot
    0    발       0
    1    팝       1
    2    팔       2
    
    >>> name_idx_map = { r['name']:r['onehot'] for _, r in df.iterrows() }
    >>> name_idx_map
    {'발': 0, '팝': 1, '팔': 2}
    >>> data = pd.Series([ ['발'], ['팝', '팔']])
    >>> data
    0       [발]
    1    [팝, 팔]
    dtype: object
    >>> data.apply(lambda e: [ name_idx_map[k] for k in e ])
    0       [0]
    1    [1, 2]
    dtype: object
    >>> 
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)