<p>您需要<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.unstack.html" rel="nofollow noreferrer">^{<cd1>}</a>进行重塑,然后<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.swaplevel.html" rel="nofollow noreferrer">^{<cd2>}</a>在<code>MultiIndex</code>列中,最后按<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_index.html" rel="nofollow noreferrer">^{<cd4>}</a>排序:</p>
<pre><code>df = gA.unstack(0).swaplevel(0,1,1).sort_index(1)
</code></pre>
<p>样品:</p>
<pre><code>#sample data
rng = pd.date_range('2017-04-03', periods=20, freq='20d')
aDF = pd.DataFrame({'FirstReceivedDate': rng, 'TotalGrantValue': range(20),
'Call':list('aaaaabbbbbcccccddddd')})
#print (aDF)
rgbDF = aDF[['FirstReceivedDate','TotalGrantValue', 'Call']].copy()
vals = ['Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan', 'Feb', 'Mar']
rgbDF['month'] = pd.Categorical(rgbDF['FirstReceivedDate'].dt.strftime('%b'),
categories=vals, ordered=True)
gA = rgbDF.groupby(['month','Call']) \
.agg({'TotalGrantValue':'sum', 'FirstReceivedDate':'count'}) \
.rename(columns={'FirstReceivedDate':'Count'})
gA['TotalGrantValue'] = gA['TotalGrantValue'].map('{:,.2f}'.format)
</code></pre>
<hr/>
<pre><code>print (gA)
TotalGrantValue Count
month Call
Apr a 1.00 2
d 19.00 1
May a 2.00 1
Jun a 7.00 2
Jul b 5.00 1
Aug b 13.00 2
Sep b 17.00 2
Oct c 10.00 1
Nov c 23.00 2
Dec c 13.00 1
Jan c 14.00 1
d 15.00 1
Feb d 16.00 1
Mar d 35.00 2
</code></pre>
<hr/>
<pre><code>df = gA.unstack(0).swaplevel(0,1,1).sort_index(1)
print (df)
month Apr May Jun Jul \
Count TotalGrantValue Count TotalGrantValue Count TotalGrantValue Count
Call
a 2.0 1.00 1.0 2.00 2.0 7.00 NaN
b NaN None NaN None NaN None 1.0
c NaN None NaN None NaN None NaN
d 1.0 19.00 NaN None NaN None NaN
month Aug ... Nov \
TotalGrantValue Count TotalGrantValue ... Count
Call ...
a None NaN None ... NaN
b 5.00 2.0 13.00 ... NaN
c None NaN None ... 2.0
d None NaN None ... NaN
month Dec Jan Feb \
TotalGrantValue Count TotalGrantValue Count TotalGrantValue Count
Call
a None NaN None NaN None NaN
b None NaN None NaN None NaN
c 23.00 1.0 13.00 1.0 14.00 NaN
d None NaN None 1.0 15.00 1.0
month Mar
TotalGrantValue Count TotalGrantValue
Call
a None NaN None
b None NaN None
c None NaN None
d 16.00 2.0 35.00
[4 rows x 24 columns]
</code></pre>