Pandas: Combina TimeGrouper con otro argumento de Groupby

Tengo el siguiente DataFrame:

df = pd.DataFrame({ 'Branch' : 'AAAAA B'.split(), 'Buyer': 'Carl Mark Carl Joe Joe Carl'.split(), 'Quantity': [1,3,5,8,9,3], 'Date' : [ DT.datetime(2013,1,1,13,0), DT.datetime(2013,1,1,13,5), DT.datetime(2013,10,1,20,0), DT.datetime(2013,10,2,10,0), DT.datetime(2013,12,2,12,0), DT.datetime(2013,12,2,14,0), ]}) from pandas.tseries.resample import TimeGrouper 

¿Cómo puedo agrupar estos datos por sucursal y en un período de 20 días utilizando TimeGrouper?

Todos mis bashs anteriores fallaron, porque no pude combinar TimeGrouper con otro argumento en la función groupby.

Apreciaría profundamente su ayuda.

Gracias

Andy

De la discusión aquí: https://github.com/pydata/pandas/issues/3791

 In [38]: df.set_index('Date').groupby(pd.TimeGrouper('6M')).apply(lambda x: x.groupby('Branch').sum()) Out[38]: Quantity Branch 2013-01-31 A 4 2014-01-31 A 22 B 3 

Y una pregunta un poco más complicada.

 In [55]: def testf(df): ....: if (df['Buyer'] == 'Mark').sum() > 0: ....: return Series(dict(quantity = df['Quantity'].sum(), buyer = 'mark')) ....: return Series(dict(quantity = df['Quantity'].sum()*100, buyer = 'other')) ....: In [56]: df.set_index('Date').groupby(pd.TimeGrouper('6M')).apply(lambda x: x.groupby('Branch').apply(testf)) Out[56]: buyer quantity Branch 2013-01-31 A mark 4 2014-01-31 A other 2200 B other 300 

Ahora puede usar un TimeGrouper con otra columna (a partir de la versión 0.14 de los pandas IIRC ):

 In [11]: df1 = df.set_index('Date') In [12]: g = df1.groupby([pd.TimeGrouper('20D'), 'Branch']) In [13]: g.sum() Out[13]: Quantity Date Branch 2013-01-01 13:00:00 A 4 2013-09-18 13:00:00 A 13 2013-11-17 13:00:00 A 9 B 3