擅长:python、mysql、java
<p>通过拆分现有列名来创建一个新的<code>columns</code>对象。这是理所当然的,我们有一个字符的字母后面跟着一个数字。你知道吗</p>
<pre><code>d = df.set_index('ID')
d.columns = d.columns.map(tuple)
d.stack().reset_index('ID')
ID A B
1 1 3 4
2 1 5 6
1 2 7 8
2 2 9 10
</code></pre>
<hr/>
<p>一行</p>
<pre><code>df.set_index('ID').rename(columns=tuple).stack().reset_index('ID')
</code></pre>
<hr/>
<p>更一般化</p>
<pre><code>d = df.set_index('ID')
s = d.columns.str
d.columns = [
s.extract('^(\D+)', expand=False),
s.extract('(\d+)$', expand=False)
]
d.stack().reset_index('ID')
</code></pre>