熊猫:生成一年中最后一天的时间序列

时间:2017-06-04 17:48:20

标签: python pandas time-series pandas-groupby

说我有一个不规则间隔的熊猫时间序列。

2010-01-04   88.82 
2010-11-29   90.70 
2010-12-01   90.09  
2011-02-26   90.10 
2011-08-01   90.55  
2011-09-21   89.50  
2012-04-01   89.06 
2012-04-30   90.22  
2012-05-03   90.21

我想从索引创建另一个时间序列,其中列由一年的最后一个日期填充。因此,对于2010年的日期,它将显示2010-12-01和2011年的日期,它将显示2011-09-21等。所需的输出是

2010-01-04   2010-12-01
2010-11-29   2010-12-01
2010-12-01   2010-12-01 
2011-02-26   2011-09-21
2011-08-01   2011-09-21 
2011-09-21   2011-09-21  
2012-04-01   2012-05-03
2012-04-30   2012-05-03 
2012-05-03   2012-05-03

我可以提取索引并按年份对它们进行分组。

end_dates=[]
df_idx = df.index
year_df = df_idx.groupby(df_idx.year)
for yr in year_df.keys():
    end_dates.append(max(year_df[yr]))

这给了我一份年度结束日期的清单。但是,如何将这些结束日期与原始索引相关联以获得所需的输出?

1 个答案:

答案 0 :(得分:1)

确保您的索引是datetimeindex对象。

如果你有熊猫系列,你可以使用它:

s.to_frame().assign(end_dates=s.groupby(s.index.year).transform(lambda x: x.index.max()))

或者如果您已有数据框:

df.assign(end_dates=df.groupby(df.index.year)['A'].transform(lambda x: x.index.max()))

输出:

                1  end_dates
0                           
2010-01-04  88.82 2010-12-01
2010-11-29  90.70 2010-12-01
2010-12-01  90.09 2010-12-01
2011-02-26  90.10 2011-09-21
2011-08-01  90.55 2011-09-21
2011-09-21  89.50 2011-09-21
2012-04-01  89.06 2012-05-03
2012-04-30  90.22 2012-05-03
2012-05-03  90.21 2012-05-03