Pandas 데이터 프레임에서 다중 값 범주 변수를 이진 인코딩하는 방법은 무엇입니까?


9

특정 열에 대해 여러 값을 가진 다음 데이터 프레임이 있다고 가정하십시오.

    categories
0 - ["A", "B"]
1 - ["B", "C", "D"]
2 - ["B", "D"]

어떻게 이런 테이블을 얻을 수 있습니까?

   "A"  "B"  "C"  "D"
0 - 1    1    0    0
1 - 0    1    1    1
2 - 0    1    0    1

참고 : 반드시 새로운 데이터 프레임이 필요하지는 않습니다. 그러한 DataFrame을 기계 학습에 더 적합한 형식으로 변환하는 방법이 궁금합니다.

답변:


7

경우 [0, 1, 2]수치 라벨이 인덱스가 아닌, 다음 pandas.DataFrame.pivot_table작동 :

에 []:
data = pd.DataFrame.from_records (
    [[0, 'A'], [0, 'B'], [1, 'B'], [1, 'C'], [1, 'D'], [2, 'B'], [ 2, 'D']],
    columns = [ 'number_label', '카테고리'])
data.pivot_table (index = [ 'number_label'], columns = [ 'category'], aggfunc = [len], fill_value = 0)
밖[]:
              렌
ABCD 카테고리
number_label                       
0 1 0 0
1,011 1
2010 1

이 블로그 게시물은 도움이되었습니다 : http://pbpython.com/pandas-pivot-table-explained.html


[0, 1, 2]색인 인 경우 collections.Counter유용합니다.

에 []:
data2 = pd.DataFrame.from_dict (
    { '범주': {0 : [ 'A', 'B'], 1 : [ 'B', 'C', 'D'], 2 : [ 'B', 'D']}})
data3 = data2 [ 'categories']. apply (collections.Counter)
pd.DataFrame.from_records (data3) .fillna (value = 0)
밖[]:
       ABCD
0 1 0 0
1,011 1
2010 1

고마워, 확인해 볼게 실제로 0, 1 및 2가 색인입니다. 또한, 제로가 많을 때 여기에서 산란을 효율적으로 처리 할 수있는 방법을 알고 있습니까?
Denis L

pandas와 scipy는 메모리를 절약하기 위해 희소 데이터 구조 ( pandas sparse , scipy sparse )를 갖지만 사용하는 기계 학습 라이브러리에서 지원하지 않을 수 있습니다. 문제의 차원 (열 수)이 너무 커서 드문 표현이 필요한 경우 차원 축소 기술 사용을 고려할 수도 있습니다 .
Samuel Harrold
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.