<p>第一种解决方案是在月初将<code>d</code>改为<code>MS</code>:</p>
<pre><code>dfMax = df2[df2["Element"] == "TMAX"]
dfMin = df2[df2["Element"] == "TMIN"]
dfMinD = dfMin.Data_Value.resample("MS").min()
dfMaxD = dfMax.Data_Value.resample("MS").max()
df = pd.concat([dfMaxD, dfMinD], axis=1, keys=('max','min'))
</code></pre>
<p>另一个解决方案是将<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DatetimeIndex.to_period.html" rel="nofollow noreferrer">^{<cd3>}</a>传递给<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">^{<cd4>}</a>并聚合<code>min</code>和<code>max</code>:</p>
<pre><code>dfMax = df2[df2["Element"] == "TMAX"]
dfMin = df2[df2["Element"] == "TMIN"]
dfMaxD = dfMax.groupby(dfMax.index.to_period('m'))['Data_Value'].max()
dfMinD = dfMin.groupby(dfMin.index.to_period('m'))['Data_Value'].min()
print (dfMinD)
Date
2005-01 -44
2015-12 -17
Freq: M, Name: Data_Value, dtype: int64
print (dfMaxD)
Date
2005-01 150
2015-12 11
Freq: M, Name: Data_Value, dtype: int64
df = pd.concat([dfMaxD, dfMinD], axis=1, keys=('max','min'))
print (df)
max min
Date
2005-01 150 -44
2015-12 11 -17
</code></pre>
<p>或者,如果需要一个解决方案来创建第一个月的PeriodIndex,则按<a href="http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.unstack.html" rel="nofollow noreferrer">^{<cd7>}</a>重塑,并按第一级聚合<code>min</code>和<code>max</code>分组:</p>
<pre><code>df = (df2.set_index(df2.index.to_period('m'))
.set_index(['ID','Element'], append=True)['Data_Value']
.unstack()
.groupby(level=0)
.agg({'TMAX':'max', 'TMIN':'min'}))
print (df)
TMAX TMIN
Date
2005-01 150.0 -44.0
2015-12 11.0 -17.0
</code></pre>