我有一个df,我按日期时间分组' 12M'。我希望按照12月31日结束的12M进行分组。目前它是在1月31日结束的年度分组。似乎必须有一个简单的方法来做到这一点,但我一直无法找到任何记录我要求的东西。我尝试过设置TimeGrouper(' 12M')但它从一年开始就不会开始计算,而是使用第一个日期索引作为起点
dfy = dfy.groupby([pd.TimeGrouper('12M'), 'fec_id', 'trans_typ', 'cmte_id'])['amount'].sum()
dfy.head()
#dfy.to_csv('out.csv')
date fec_id trans_typ cmte_id
2007-01-31 C00002600 24K C00000729 1000
C00002840 1000
C00004325 1000
C00005157 1000
C00009985 1000
Name: amount, dtype: int64
答案 0 :(得分:1)
将closed='left'
参数与pd.TimeGrouper
一起使用。
pd.TimeGrouper('12M', closed='left')
答案 1 :(得分:1)
您可以Grouper
使用freq=A
:
g = df.groupby([pd.Grouper(level='date', freq='A'), 'cand_id', 'trans_typ'])['amount'].sum()
print g
date cand_id trans_typ
2001-12-31 H2HI02110 24K 2500
2007-12-31 H8IL21021 24K -1000
S6TN00216 24K 2000
2008-12-31 H2PA11098 24K 1000
H4KS03105 24K 49664
H6KS01146 24K 2000
H6KS03183 24K 1000
H8KS02090 24K 1000
S6TN00216 24K 2500
2009-12-31 H0MO00019 24K 500
H8MO09153 24K 500
S0MO00183 24K 1000
S0NY00410 24K 0
S2KY00012 24K 2000
S6OH00163 24K -4000
S6TN00216 24K -2000
S6WY00068 24K -3500