<p>你可以这样做:</p>
<pre><code>In [62]: df.sort_values('MME').groupby('PTNAME').agg({'MME':'sum', 'DRUGNAME':'last'})
Out[62]:
DRUGNAME MME
PTNAME
PATIENT, A OXYCODONE HCL 15 MG 5400
PATIENT, B MORPHINE SULFATE ER 15 MG 10290
PATIENT, C OXYCODONE-ACETAMINOPHE 10MG-32 3150
</code></pre>
<p>或使用<code>.reset_index()</code>:</p>
<pre><code>In [64]: df.sort_values('MME').groupby('PTNAME').agg({'MME':'sum', 'DRUGNAME':'last'}).reset_index()
Out[64]:
PTNAME DRUGNAME MME
0 PATIENT, A OXYCODONE HCL 15 MG 5400
1 PATIENT, B MORPHINE SULFATE ER 15 MG 10290
2 PATIENT, C OXYCODONE-ACETAMINOPHE 10MG-32 3150
</code></pre>
<p><strong>更新:</strong>使用<code>agg()</code>函数更有趣</p>
<pre><code>In [84]: agg_funcs = {
...: 'MME':{'MME_max':'last',
...: 'MME_total':'sum'},
...: 'DRUGNAME':{'DRUGNAME_max_MME':'last'}
...: }
...:
...: rslt = (df.sort_values('MME')
...: .groupby('PTNAME')
...: .agg(agg_funcs)
...: .reset_index()
...: )
...: rslt.columns = [tup[1] if tup[1] else tup[0] for tup in rslt.columns]
...:
In [85]: rslt
Out[85]:
PTNAME MME_total MME_max DRUGNAME_max_MME
0 PATIENT, A 5400 2700 OXYCODONE HCL 15 MG
1 PATIENT, B 10290 4050 MORPHINE SULFATE ER 15 MG
2 PATIENT, C 3150 1800 OXYCODONE-ACETAMINOPHE 10MG-32
</code></pre>