我有一个时间序列作为pandas数据框,其中有一列名为“ pre”。数据框的索引是pandas date_range。日期范围从1998-01-01
到2002-12-31
。
我想获取从“ 1998-01-01”到“ 1998-05-31”加上“ 1998-09-01”到“ 1998-12-31”的前置值的总和。在获得1998年的奖励后,我如何才能在所有这些年都获得同样的奖励?
答案 0 :(得分:2)
将字典理解与f-string
一起使用:
np.random.seed(2020)
r = pd.date_range('1998-01-01','2002-12-31')
s = pd.Series(np.random.randint(10, size=len(r)), index=r)
# print (s)
out = {y: s.loc[f"{y}-01-01":f"{y}-05-31"].sum() + s.loc[f"{y}-09-01":f"{y}-12-31"].sum()
for y in range(1998, 2003)}
print (out)
{1998: 1235, 1999: 1201, 2000: 1154, 2001: 1270, 2002: 1184}
另一种解决方案是将DatetimeIndex
转换为月份并删除6,7,8
个月,然后按年份与总计sum
进行分组:
s1 = s[~s.index.month.isin([6,7,8])]
print (s1.groupby(s1.index.year).sum())
1998 1235
1999 1201
2000 1154
2001 1270
2002 1184
dtype: int32