<p>使用<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.cumcount.html" rel="nofollow noreferrer">^{<cd1>}</a>作为<code>df3</code>中创建的<code>MultiIndex</code>计数器列的新列:</p>
<pre><code>df['g'] = df.groupby(['Student Id','Name']).cumcount().add(1)
df3 = (df.pivot_table(index=['Student Id','Name'],
columns='g',
values='Marks',
aggfunc = 'max')
.add_prefix('Marks')
.rename_axis(None, axis=1)
.reset_index())
print (df3)
Student Id Name Marks1 Marks2 Marks3
0 id_1 John 112.0 NaN NaN
1 id_2 Rafs 181.0 182.0 183.0
2 id_3 Juan 222.0 312.0 NaN
3 id_3 Roller 21.0 NaN NaN
</code></pre>
<p>如果需要<a href="https://pandas.pydata.org/docs/user_guide/integer_na.html" rel="nofollow noreferrer">integers</a>缺少值:</p>
<pre><code>df['g'] = df.groupby(['Student Id','Name']).cumcount().add(1)
df3 = (df.pivot_table(index=['Student Id','Name'],
columns='g',
values='Marks',
aggfunc = 'max')
.add_prefix('Marks')
.astype('Int64')
.rename_axis(None, axis=1)
.reset_index())
print (df3)
Student Id Name Marks1 Marks2 Marks3
0 id_1 John 112 <NA> <NA>
1 id_2 Rafs 181 182 183
2 id_3 Juan 222 312 <NA>
3 id_3 Roller 21 <NA> <NA>
</code></pre>