<p>IIUC,您可以在<code>name</code>和<code>cumcount</code>上尝试<code>groupby</code>,然后是<code>unstack</code>:</p>
<pre><code>df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']).unstack()
</code></pre>
<hr/>
<pre><code> data
name Country or Area Item Value Year
k
0 Aruba Population, total 54211 1960
1 Aruba Population, total 55438 1961
2 Aruba Population, total 56225 1962
3 Aruba Population, total 56695 1963
4 Aruba Population, total 57032 1964
</code></pre>
<p>详情:
<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.cumcount.html" rel="nofollow noreferrer">^{<cd5>}</a></p>
<pre><code>df.groupby('name').cumcount()
</code></pre>
<p>这将按名称和<code>Numbers each item in each group from 0 to the length of that group - 1</code>分组,并使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.assign.html" rel="nofollow noreferrer">^{<cd7>}</a>将一个新列<code>k</code>分配给数据帧。然后使用<code>set_index()</code>wee将名称和<code>k</code>列设置为索引,以便获得:</p>
<pre><code>print(df.assign(k=df.groupby('name').cumcount()).set_index(['k','name']))
data
k name
0 Country or Area Aruba
Item Population, total
Year 1960
Value 54211
1 Country or Area Aruba
Item Population, total
Year 1961
Value 55438
2 Country or Area Aruba
Item Population, total
Year 1962
Value 56225
.......
.....
</code></pre>
<p>使用这些数据,我们使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.unstack.html" rel="nofollow noreferrer">^{<cd11>}</a>,这有助于“<em>透视一级(必要的层次结构)索引标签,返回一个具有新级别列标签的数据帧,该列标签的最内层由透视索引标签</em>组成”,因此这会根据我们的需要将索引的最后一级(默认情况下)转换为列</p>