복붙노트

[PYTHON] 여러 문자열이있는 열에서 get_dummies 형식 데이터 프레임을 만드는 가장 빠른 방법

PYTHON

여러 문자열이있는 열에서 get_dummies 형식 데이터 프레임을 만드는 가장 빠른 방법

나는 문자열 'col2'를 가지고 있는데, 문자열 목록이있다. 현재 가지고있는 코드는 너무 느립니다. 약 2000 개의 고유 한 문자열 (아래 예제의 문자)과 4000 개의 행이 있습니다. 2000 열과 4000 행으로 끝납니다.

In [268]: df.head()
Out[268]:
    col1    col2
0   6       A,B
1   15      C,G,A
2   25      B

인형 형식을 얻을 수있는 빠른 방법이 있습니까? 각 문자열에는 고유 한 열이 있고 각 문자열의 열에는 col2에 해당 문자열이있는 경우 0 또는 1이 있습니다.

In [268]: def get_list(df):
d = []
for row in df.col2:
    row_list = row.split(',')
    for string in row_list:
        if string not in d:
            d.append(string)
return d

df_list = get_list(df)

def make_cols(df, lst):
    for string in lst:
        df[string] = 0
    return df

df = make_cols(df, df_list)


for idx in range(0, len(df['col2'])):
    row_list = df['col2'].iloc[idx].split(',')
    for string in row_list:
        df[string].iloc[idx]+= 1

Out[113]:
col1    col2    A   B   C   G
0   6   A,B     1   1   0   0
1   15  C,G,A   1   0   1   1
2   25  B       0   1   0   0

이것은 그것을위한 나의 현재 코드이지만 너무 느립니다.

어떤 도움을 주셔서 감사합니다!

해결법

  1. ==============================

    1.당신이 사용할 수있는:

    당신이 사용할 수있는:

    >>> df['col2'].str.get_dummies(sep=',')
       A  B  C  G
    0  1  1  0  0
    1  1  0  1  1
    2  0  1  0  0
    

    데이터 프레임에 참여하려면 :

    >>> pd.concat([df, df['col2'].str.get_dummies(sep=',')], axis=1)
       col1   col2  A  B  C  G
    0     6    A,B  1  1  0  0
    1    15  C,G,A  1  0  1  1
    2    25      B  0  1  0  0
    
  2. from https://stackoverflow.com/questions/28121682/quickest-way-to-make-a-get-dummies-type-dataframe-from-a-column-with-a-multiple by cc-by-sa and MIT license