我想使用大熊猫的groupby方法在两个月内汇总数据。而且我无法达到预期的结果。实际上,我的数据跨越了4个月。因此,我想要两个时期:第一个介于2018-06-01和2018-07-31之间,第二个介于2018-08-01和2018-09-30之间。在代码下面,您将找到获得的和预期的结果。您能帮我一下吗?先感谢您 !
# data sample
data={'A': pd.to_datetime(['2018-06-01','2018-06-15','2018-07-01','2018-07-15','2018-08-01','2018-08-15','2018-09-01','2018-09-15','2018-09-30']),
'B': [1,1,1,1,1,1,1,1,1]}
#create dataframe
test=pd.DataFrame.from_dict(data)
#aggregation of data by period of two months
test.groupby(pd.Grouper(key='A', freq='2M',closed="right")).sum()
# The results
# B
# A
# 2018-06-30 2
# 2018-08-31 4
# 2018-10-31 3
#The expected results :
# B
# A
# 2018-07-31 4
# 2018-09-30 5
答案 0 :(得分:0)
我认为您的方法无法实现,因为在熊猫中如何定义时间频率。我能得到的最接近的是:
In [22]: test.groupby(pd.Grouper(key='A', freq='2M', closed='left', base="2018-06-01")).sum()
Out[22]:
B
A
2018-07-31 4
2018-09-30 4
2018-11-30 1
获得结果的一种不太精致的方法可能是:
In [30]: test['year'] = [x.year for x in test.A]
In [31]: test['month'] = [x.month for x in test.A]
In [58]: bimestres = np.repeat(np.arange(1,13,2),2)
In [59]: test['bimestre'] = [bimestres[x] for x in test.month]
In [60]: test.groupby(by=['year', 'bimestre'])['B'].sum()
Out[60]:
year bimestre
2018 7 4
9 5
Name: B, dtype: int64