<ul>
<li>我要在<code>data_01.a - 3</code>上使用<code>np.sign</code>
<ul>
<li>当<code>< 3</code>时返回<code>-1</code>,当<code>== 3</code>时返回<code>0</code>,当<code>> 3</code>时返回<code>1</code></li>
</ul></li>
<li><p>然后我使用这些作为标签数组的索引</p>
<pre><code>labels = np.array(['mid', 'good', 'poor'])
</code></pre></li>
<li><p>当我切片时,<code>0</code>映射到<code>'mid'</code>,<code>1</code>映射到<code>'good'</code>,<code>-1</code>映射到<code>'poor'</code></p></li>
<li>最后,我使用<code>pd.get_dummies</code>创建虚拟列。你知道吗</li>
</ul>
<hr/>
<pre><code>labels = np.array(['mid', 'good', 'poor'])
data_01.join(pd.get_dummies(labels[np.sign(data_01.a - 3)]))
a name good mid poor
0 5 Jack 1 0 0
1 2 jon 0 0 1
2 4 tom 1 0 0
3 5 lazzy 1 0 0
4 3 mack 0 1 0
5 3 zack 0 1 0
6 1 makilo 0 0 1
7 2 drag 0 0 1
8 3 maiko 0 1 0
</code></pre>
<hr/>
<p>备选方案1
它使用<code>np.eye</code>来生成虚拟列。我创建dictionary将虚拟对象绑定到标签上,并将dictionary传递给<code>pd.DataFrame.assign</code></p>
<pre><code>dum = dict(zip(
['mid', 'good', 'poor'],
np.eye(3, dtype=int)[:, np.sign(data_01.a - 3)]
))
data_01.assign(**dum)
a name good mid poor
0 5 Jack 1 0 0
1 2 jon 0 0 1
2 4 tom 1 0 0
3 5 lazzy 1 0 0
4 3 mack 0 1 0
5 3 zack 0 1 0
6 1 makilo 0 0 1
7 2 drag 0 0 1
8 3 maiko 0 1 0
</code></pre>
<hr/>
<p>备选方案2
我再次使用<code>np.eye</code>,但这次,我从头创建了一个数据帧,并使用<code>pd.DataFrame.join</code>将其附加到<code>data_01</code></p>
<pre><code>dum = pd.DataFrame(
np.eye(3, dtype=int)[np.sign(data_01.a - 3)],
data_01.index, ['mid', 'good', 'poor']
)
data_01.join(dum)
a name mid good poor
0 5 Jack 0 1 0
1 2 jon 0 0 1
2 4 tom 0 1 0
3 5 lazzy 0 1 0
4 3 mack 1 0 0
5 3 zack 1 0 0
6 1 makilo 0 0 1
7 2 drag 0 0 1
8 3 maiko 1 0 0
</code></pre>