파이썬 DataFrame 관련 질문 드립니다.
조회수 1491회
파이썬에서 간단히 DataFrame의 데이터를 매핑하려고 합니다. 아래와 같이 M과 N DataFrame을 각각 생성하고,
import pandas as pd
M = { 'x': ['a', 'b', 'c'], 'y': ['1', '2', '3'] }
N = { 'i': ['3', '1', '2'] }
M = pd.DataFrame(M)
N = pd.DataFrame(N)
N의 i열의 특정 값과 동일한 값을 M의 y 열에서 찾은 후, 그와 대응하는(그와 같은 행에 있는) 값을 M의 x열에서 찾고 싶습니다. 예를 들어, N['i'][2]값('2')와 동일한 값이 M['y'][1]에 있으므로, 이에 대응하는 x열의 값, 즉 M['x'][1]값('b')를 찾는 것인데, 개별적으로는 아래와 같이 입력하면 'b'값을 얻을 수 있었습니다.
M['x'][N['i'][2]==M['y']]
그런데, 이것을 일괄적으로 처리하여 N의 j열에 저장하고 싶은데, 아래와 같이 작성하니 j열 값이 [NaN, a, Nan]으로 표시됩니다. 원하는 것은 [c, a, b]로 표시되는 것입니다.
N['j'] = ''
N['j'] = N.apply(lambda e: M['x'][e['i'] == M['y']], axis=1)
최종적으로 N의 j열에 아래와 같은 값을 저장하는 것이 목적입니다.
M | - | - | N | - |
---|---|---|---|---|
x | y | i | j | |
a | 1 | 3 | c | |
b | 2 | 1 | a | |
c | 3 | 2 | b |
어떻게 수정해야 제대로 동작할지 도움 부탁 드리겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
import pandas as pd M = { 'x': ['a', 'b', 'c'], 'y': ['1', '2', '3'] } N = { 'i': ['3', '1', '2'] } M = pd.DataFrame(M) N = pd.DataFrame(N) import string mappedData = dict(zip(map(str, range(1, 27)), string.ascii_lowercase)) # '1':'a' '2':'b' ... '26':'z' N['j'] = [mappedData[k] for k in N['i']] N Out[20]: i j 0 3 c 1 1 a 2 2 b
1이면 a 3이면 c 이므로 숫자를 키로 알파벳을 값으로 하는 딕셔너리를 만들고 그 딕셔너리를 이용해서 값을 알아내도 가능합니다.
- 감사합니다. 초급자인데, 덕분에 딕셔너리를 생성하는 방법과 map 메서드에 대해 알게 되었습니다. 제가 궁극적으로 구현하고자 했던 것은 M 데이터를 외부 엑셀 파일에서 DataFrame으로 불러와서 매핑하는 것이어서, 설명주신 내용 참고하여 아래 답변과 같이 코드를 완성했습니다. (댓글에서는 마크다운 문법이 적용이 안되어 답변에 남겼습니다.) 알 수 없는 사용자 2017.4.29 22:59
-
import pandas as pd M = { 'x': ['a', 'b', 'c'], 'y': ['1', '2', '3'] } N = { 'i': ['3', '1', '2'] } M = pd.DataFrame(M) N = pd.DataFrame(N) mappedData = dict(zip(M['y'], M['x'])) N['j'] = N['i'].map(mappedData)
결과값은 동일합니다. 다시 한번 도움 주셔서 감사합니다!
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력