<p>如果使项具有统一的分隔符,则可以使用<a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.str.get_dummies.html" rel="nofollow noreferrer">^{<cd2>}</a>的<code>sep</code>参数来获取一个热编码。为此,我将空格替换为逗号:</p>
<pre><code>>>> df['Description'].str.replace(' ', ',').str.get_dummies(sep=',')
BLUE PINK RED SHIRT SKIRT YELLOW
0 1 0 1 1 0 0
1 0 0 0 1 0 1
2 1 1 0 0 1 0
</code></pre>
<p>那么你只需要加入:</p>
<pre><code>>>> df.join(df['Description'].str.replace(' ', ',').str.get_dummies(sep=','))
Item Description BLUE PINK RED SHIRT SKIRT YELLOW
0 R2G1 RED, BLUE, SHIRT 1 0 1 1 0 0
1 G23A YELLOW SHIRT 0 0 0 1 0 1
2 P001 BLUE, PINK SKIRT 1 1 0 0 1 0
</code></pre>
<p>但是需要注意的是(正如Rob所评论的),这是从<code>Description</code>列确定类别,而不是从<code>categories</code>列表本身确定类别。因此,如果您有不在<code>categories</code>中的描述,您将有额外的列。例如,如果一个描述包含<code>"GREEN"</code>,您将得到整个绿色列</p>
<p>同样,描述中不存在的类别也不会作为列包含。因此,如果说第一行丢失了,那么RED就没有列了</p>
<p>如果这是一个问题,我可以想办法修复这些行为,但我认为更简单的方法是使用<a href="https://stackoverflow.com/a/68874573/13386979">heretolearn's answer</a>或其他明确包含<code>categories</code>的方法</p>