<p>我能够通过以下方法获得您想要的结果</p>
<p><strong>步骤1:</strong>创建将在结果数据集中使用的列列表</p>
<pre><code>>>> cols = list(set(df['categories'].explode())) #set makes sure we keep unique columns
>>> cols.insert(0,df.columns[0])
cols
Out[359]: ['item', 'red', 'white', 'blue']
</code></pre>
<p><em>可选:您可以通过将列转换为列表类型来确保<code>explode()</code>有效:</em><a href="https://stackoverflow.com/questions/63472664/pandas-explode-function-not-working-for-list-of-string-column">taken from here</a></p>
<pre><code>from ast import literal_eval
df['categories'] = df['categories'].apply(literal_eval) # convert to list type
</code></pre>
<p><strong>步骤2:</strong>将代码与<code>pd.get_dummies()</code>一起使用,并创建1/0数据集。为了避免获得更多的行,我使用<code>groupby.index</code>添加了一个额外的步骤:</p>
<pre><code>>>> temp = pd.get_dummies(df['categories'].explode())
>>> temp_res = temp.groupby(temp.index).sum()
Out[365]:
blue red white
0 0 1 1
1 1 1 0
</code></pre>
<p><strong>第3步:</strong>,I<code>concat</code>您的“项目”列具有上述结果,并使用在第一步中创建的列列表获得所需的结果:</p>
<pre><code>>>> out = pd.concat([df['item'],temp_res],axis=1,ignore_index=False)
>>> out = out[cols]
Out[368]:
item red white blue
0 blue_shirt 1 1 0
1 red_skirt 1 0 1
</code></pre>
<p><strong>一个块中的所有代码</strong>:</p>
<pre><code>from ast import literal_eval
df['categories'] = df['categories'].apply(literal_eval) #convert to list type
cols = list(set(df['categories'].explode()))
cols.insert(0,df.columns[0])
temp = pd.get_dummies(df['categories'].explode())
temp_res = temp.groupby(temp.index).sum()
out = pd.concat([df['item'],temp_res],axis=1)
out = out[cols]
</code></pre>