此问题类似于this one,但有一点不同:此处不是单个值,而是在一列数据框中有一个值列表。
假设我们有一个pandas数据框,其中一列名为words
。它包含文档中可用的单词索引。例如,在以下数据框中,有两个文档,其中第一个包含单词['a','b']
,第二个包含['a','c','d']
。
df = pd.DataFrame()
df['words'] = [['a','b'],['a','c','d']]
我想将words
列转换为不同的二进制列,每个单词一列。上述数据框将转换为:
df['a'] = [True, True]
df['b'] = [True, False]
df['c'] = [False, True]
df['d'] = [False, True]
目前,我有以下代码,它会迭代w
列中提供的不同字words
。
df[w] = [w in word_list for word_list in df['words']]
显然,它很慢。有没有一种有效的方法呢?
答案 0 :(得分:2)
一种方法是使用get_dummies
In [31]: pd.get_dummies(df.words.apply(pd.Series).stack()).sum(level=0).astype(bool)
Out[31]:
a b c d
0 True True False False
1 True False True True
另一种方式,假设您在字符串中没有|
或使用任何其他分隔符
In [50]: df.words.str.join('|').str.get_dummies('|').astype(bool)
Out[50]:
a b c d
0 True True False False
1 True False True True
单值。
In [68]: df['a'] = df.words.apply(lambda x: 'a' in x) # or ['a' in x for x in df.words]