Pandas Groupby两列其中一列是datetime
我有一个数据框,我想按两列分组,其中一列是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'
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