<p>我认为在您想要的输出中有一个小的输入错误,您有<code>2108</code>而不是<code>2018</code></p>
<p>我尝试完全复制您的数据帧:</p>
<pre><code>>>> df.to_dict()
Out[99]:
{'2019.': {0: 'FF.', 1: 'DD.'},
'C1.': {0: 20.0, 1: 22.0},
'2018.': {0: 'TT.', 1: 'JJ.'},
'C2': {0: 70.0, 1: 66.0},
2017: {0: 'HH.', 1: 'DD.'},
'C3': {0: 88, 1: 99}}
</code></pre>
<p>将原始df分为两部分。然后使用<code>pd.melt()</code>、<code>rename(axis=1)</code>和<code>drop()</code>:</p>
<pre><code># One
one = df[['2019.','2018.',2017]].melt().rename({'variable':'','value':'COL1.'},axis=1)
print(one)
COL1.
0 2019.0 FF.
1 2019.0 DD.
2 2018.0 TT.
3 2018.0 JJ.
4 2017 HH.
5 2017 DD.
# Two
two = df[['C1.','C2','C3']].melt().drop('variable',axis=1).rename({'value':'C'},axis=1)
print(two)
C
0 20.0
1 22.0
2 70.0
3 66.0
4 88.0
5 99.0
</code></pre>
<p>最后,我使用<code>pd.concat</code>和<code>reindex()</code>来获得所需的列顺序:</p>
<pre><code>out = pd.concat([one,two],axis=1).reindex(['COL1.','C',''], axis=1)
</code></pre>
<hr/>
<pre><code> COL1. C
0 FF. 20.0 2019.0
1 DD. 22.0 2019.0
2 TT. 70.0 2018.0
3 JJ. 66.0 2018.0
4 HH. 88.0 2017
5 DD. 99.0 2017
</code></pre>