<p>您可以使用pandas groupby查找每年的最后一个月(即最大)和最后一天,然后合并数据帧以仅筛选包含最后一个月和最后一天的行。正如您不必假设数据中12月的最后一天是31日一样,您也不必假设数据中一年的最后一个月是12月。有多种方法可以做到这一点,您可以按不同的顺序执行以下步骤。以下是我认为最容易遵循的一条:</p>
<pre><code>row1list = [2010, 12, 28]
row2list = [2010, 12, 20]
row3list = [2011, 11, 20]
row4list = [2011, 11, 15]
row5list = [2011, 10, 30]
df = pd.DataFrame([row1list, row2list, row3list, row4list, row5list], columns=['year', 'month', 'day'])
# find last day for every combo of year, month
df_last_day_per_year_month = df.groupby(['year', 'month'], as_index=False).agg({
'day': max})
# find last month for every year, using only the rows with max day per year, month
df_last_month_per_year = df_last_day_per_year_month.groupby('year', as_index=False).agg({
'month': max})
# keep only the last month by comparing month values to last month per year
df_last_month_per_year = df_last_month_per_year.rename(columns={'month':'last_month'})
df_last_day_per_year_month = df_last_day_per_year_month.merge(df_last_month_per_year, on='year', how='left')
df_last_day_per_year_month = df_last_day_per_year_month[df_last_day_per_year_month['month'] == df_last_day_per_year_month['last_month']]
# don't need 'last_month' column anymore so delete it
del df_last_day_per_year_month['last_month']
# inner merge to filter original df to keep only the dates that are max month, day per year
df = df.merge(df_last_day_per_year_month, on=['year', 'month', 'day'], how='inner')
print(df)
# year month day
# 0 2010 12 28
# 1 2011 11 20
</code></pre>