我有一列“ 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
这是我目前的代码,但是太慢了。
谢谢您的帮助!
您可以使用:
>>> 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