天天看點

python pandas 分組(groupby)+重采樣(resample)

目的:

先按照列B分組,再按照列A按月重采樣,求和

df = pd.DataFrame({'A': {0: '2017-12-05', 1: '2018-02-05', 2: '2018-01-05', 3: '2018-01-15'}, 
                   'B': {0: 1, 1: 1, 2: 2, 3: 2},
                   'C': {0: 1, 1: 3, 2: 1, 3: 3},
                   'D': {0: 1, 1: 2, 2: 3, 3: 4}})
                   
>>> df
#  	          A 	B 	C 	D
# 0 	2017-01-05 	1 	1 	1
# 1 	2018-02-05 	1 	3 	2
# 2 	2018-01-05 	2 	1 	3
# 3 	2018-01-15 	2 	3 	4

>>> df.set_index(pd.to_datetime(df.A)).groupby('B').resample('M').sum()
#  		            B 	C 	D
# B 	A 			
# 1 	2017-12-31 	1 	1 	1
#       2018-01-31 	0 	0 	0
#       2018-02-28 	1 	3 	2
# 2 	2018-01-31 	4 	4 	7

           

說明:

  1. 時間字元串要先 pd.to_datetime() 轉化成時間格式
  2. resample()出來的結果顯示為當月最後一天
  3. 同組的resample()結果的時間是相連的(也就是空隙會補全):2017-12 有值,2018-02 有值,是以2018-01填充0