如何筛选Pandas DataFrame,获取每年最后一行数据?
Pandas筛选DataFrame每年最后一个日期的行数据
需求说明
从给定的Pandas DataFrame中,仅保留每年最后一个日期对应的行数据。
原始DataFrame
A B C D E F G Date 2018-05-03 20.700001 20.840000 20.549999 20.549999 12.248506 1355100 0.462484 2018-05-15 19.400000 19.400000 18.620001 19.000000 11.748817 5060500 0.736852 2018-08-10 19.709999 19.840000 19.209999 19.400000 12.286919 2369800 0.477069 2018-11-12 22.190001 22.500000 22.030001 22.379999 14.629877 1727100 0.711570 2018-12-18 23.450001 23.450001 22.730000 22.799999 15.160932 1576600 0.399275 2019-05-06 25.990000 26.000000 25.570000 25.950001 17.365524 1500700 0.165950 2019-05-20 23.990000 24.940001 23.990000 24.889999 16.851423 1449000 0.280836 2019-08-09 28.299999 28.450001 27.900000 28.250000 19.616335 1868600 0.722007 2019-11-21 27.750000 27.959999 27.709999 27.820000 19.695263 884000 0.541491 2019-12-17 30.299999 30.440001 29.910000 30.030001 21.386765 1019300 0.180416
预期结果
A B C D E F G Date 2018-12-18 23.450001 23.450001 22.730000 22.799999 15.160932 1576600 0.399275 2019-12-17 30.299999 30.440001 29.910000 30.030001 21.386765 1019300 0.180416
解决方案
方法一:分组筛选(适配非标准年末日期)
先确保索引为datetime类型,再按年份分组,提取每组中日期最大的行:
import pandas as pd # 转换索引为datetime类型(若原始索引不是该类型) df.index = pd.to_datetime(df.index) # 按年份分组,筛选每年最后一个日期的行 result = df.loc[df.groupby(df.index.year)['A'].idxmax()]
这里选取列A仅用于获取索引,所有列的索引一致,可替换为任意列名。
方法二:resample重采样(更简洁)
利用Pandas的resample方法按年重采样,直接提取每个年周期的最后一行:
result = df.resample('Y').last()
'Y'代表按年周期划分,last()会自动提取每个周期内的最后一行数据,完全匹配需求。
内容的提问来源于stack exchange,提问作者Sergio Pantano
相关产品推荐
相关产品推荐

