Pandas Groupby两列其中一列是datetime

Pandas Groupby两列其中一列是datetime,pandas,dataframe,datetime,Pandas,Dataframe,Datetime,我有一个数据框,我想按两列分组,其中一列是datetime类型。我该怎么做 import pandas as pd import datetime as dt df = pd.DataFrame({ 'a':np.random.randn(6), 'b':np.random.choice( [5,7,np.nan], 6), 'g':{1002,300,1002,300,1002,300} 'c':np.random.choice( ['panda','python','shark'

我有一个数据框,我想按两列分组,其中一列是datetime类型。我该怎么做

import pandas as pd 
import datetime as dt 

df = pd.DataFrame({ 


'a':np.random.randn(6),
'b':np.random.choice( [5,7,np.nan], 6),
'g':{1002,300,1002,300,1002,300}
'c':np.random.choice( ['panda','python','shark'], 6),

# some ways to create systematic groups for indexing or groupby
# this is similar to r's expand.grid(), see note 2 below
'd':np.repeat( range(3), 2 ),
'e':np.tile(   range(2), 3 ),

# a date range and set of random dates
'f':pd.date_range('1/1/2011', periods=6, freq='D'),
'g':np.random.choice( pd.date_range('1/1/2011', periods=365, 
                      freq='D'), 6, replace=False) 
})
您可以使用来指定groupby指令。它可以与
pd.DatetimeIndex
索引一起使用,使用
freq
参数以指定的频率对数据进行分组

假设您拥有此数据帧:

df=pd.DataFrame(dict(
a=dict(日期=pd.时间戳('2020-05-01'),类别='a',值=1),
b=dict(日期=pd.时间戳('2020-06-01'),类别='a',值=2),
c=dict(日期=pd.时间戳('2020-06-01'),类别='b',值=6),
d=dict(日期=pd.时间戳('2020-07-01'),类别=a',值=1),
e=dict(日期=pd.时间戳('2020-07-27'),类别=a',值=3),
))T
您可以将索引设置为
date
列,并将其转换为
pd.DatetimeIndex
。然后您可以将pd.Grouper与其他列一起使用。对于以下示例,我使用
category

freq='M'
用于使用月频率对索引进行分组的参数。在
pd.Grouper

df.set_index('date').groupby([pd.Grouper(freq='M'),'category'])['value'].sum()
结果:

date        category
2020-05-31  a           1
2020-06-30  a           2
            b           6
2020-07-31  a           4
Name: value, dtype: int64
g           c     
2011-01-31  panda     0
2011-04-30  shark     2
2011-06-30  panda     2
2011-07-31  panda     0
2011-09-30  panda     1
2011-12-31  python    1
Name: d, dtype: int32
mcve的另一个示例:

df.set_index('g').groupby([pd.Grouper(freq='M'),'c']).d.sum()
结果:

date        category
2020-05-31  a           1
2020-06-30  a           2
            b           6
2020-07-31  a           4
Name: value, dtype: int64
g           c     
2011-01-31  panda     0
2011-04-30  shark     2
2011-06-30  panda     2
2011-07-31  panda     0
2011-09-30  panda     1
2011-12-31  python    1
Name: d, dtype: int32