<p>用途:</p>
<ul>
<li><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.set_index.html" rel="nofollow noreferrer">^{<cd1>}</a>喜欢你的解决方案吗</li>
<li><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.apply.html" rel="nofollow noreferrer">^{<cd2>}</a>用于使用lambda函数处理<code>DataFrame</code>by <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.split.html" rel="nofollow noreferrer">^{<cd4>}</a>和<code>expand=True</code>的多个列,并按<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.stack.html" rel="nofollow noreferrer">^{<cd6>}</a>重塑</li>
<li><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html" rel="nofollow noreferrer">^{<cd7>}</a>对于<code>Multiindex</code>列</li>
<li><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html" rel="nofollow noreferrer">^{<cd9>}</a>首先是remove level,然后是<code>Multiindex</code>to columns</li>
<li>重命名列</li>
<li><a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex_axis.html" rel="nofollow noreferrer">^{<cd11>}</a>表示列的更改顺序</li>
</ul>
<hr/>
<pre><code>df = (df.set_index('prod')
.apply(lambda x: x.str.split('\n', expand=True).unstack())
.stack()
.reset_index(level=0, drop=True)
.reset_index(name='testcase')
.rename(columns={'level_1':'category'})
.reindex_axis(['prod','testcase','category'], axis=1))
print (df)
prod testcase category
0 TS001 001_002 activate
1 TS001 004_005 deactivate
2 TS002 003_008 activate
3 TS002 001_008 deactivate
4 TS001 001_004 activate
5 TS001 006_008 deactivate
6 TS002 024_080 activate
</code></pre>