판다스 두개의 다른 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 답변
-
더 간단한 방법이 있을 것 같은데, 좀 무식하게,
- df 를 iterrows 하면서, for 문으로 name-index map (dict)을 하나 만들었고,
- 만든 맵으로 리스트의 각 원소를 매핑하는 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 >>>
댓글 입력