熊猫:两个月的聚合问题

时间:2019-01-30 13:48:26

标签: python pandas-groupby

我想使用大熊猫的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

1 个答案:

答案 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