我有时间序列
date
2009-12-23 0.0
2009-12-28 0.0
2009-12-29 0.0
2009-12-30 0.0
2009-12-31 0.0
2010-01-04 0.0
2010-01-05 0.0
2010-01-06 0.0
2010-01-07 0.0
2010-01-08 0.0
2010-01-11 0.0
2010-01-12 0.0
2010-01-13 0.0
2010-01-14 0.0
2010-01-15 0.0
2010-01-18 0.0
2010-01-19 0.0
2010-01-20 0.0
2010-01-21 0.0
2010-01-22 0.0
2010-01-25 0.0
2010-01-26 0.0
2010-01-27 0.0
2010-01-28 0.0
2010-01-29 0.0
2010-02-01 0.0
2010-02-02 0.0
我想根据以下规则将值设置为1:
我试图用day<创建两个系列之一(series1) 9设置为1和1(系列2),日期> 9到1然后series1.shift(1) * series2
它适用于月中,但如果将day设置为1则不会,因为上一个月的最后一个日期在series1中设置为0。
答案 0 :(得分:3)
假设您的时间序列为s
且日期时间指数
我想创建一个groupby
个对象,其中包含日期大于或等于9
的所有索引值。
g = s.index.to_series().dt.day.ge(9).groupby(pd.TimeGrouper('M'))
然后我会检查至少有一天>= 9
并抓住其中的第一天。有了这些,我将赋值为1。
s.loc[g.idxmax()[g.any()]] = 1
s
date
2009-12-23 1.0
2009-12-28 0.0
2009-12-29 0.0
2009-12-30 0.0
2009-12-31 0.0
2010-01-04 0.0
2010-01-05 0.0
2010-01-06 0.0
2010-01-07 0.0
2010-01-08 0.0
2010-01-11 1.0
2010-01-12 0.0
2010-01-13 0.0
2010-01-14 0.0
2010-01-15 0.0
2010-01-18 0.0
2010-01-19 0.0
2010-01-20 0.0
2010-01-21 0.0
2010-01-22 0.0
2010-01-25 0.0
2010-01-26 0.0
2010-01-27 0.0
2010-01-28 0.0
2010-01-29 0.0
2010-02-01 0.0
2010-02-02 0.0
Name: val, dtype: float64
请注意,2009-12-23
也被分配了1
,因为它也符合此要求。