[英]resample a MultiIndex
我有一個DataFrame
具有MultiIndex
。 第一層是具有每周頻率的DatetimeIndex
。 第二個層次是未被第一級跨集團一致。
我想按月對第一級進行分組,並進行前幾周的行。
midx = pd.MultiIndex.from_arrays([
pd.date_range('2018-01-01', freq='W', periods=10).repeat(2),
list('ABCDEFGHIJ' * 2)
], names=['Date', 'Thing'])
df = pd.DataFrame(dict(Col=np.arange(10, 30)), midx)
df
Col
Date Thing
2018-01-07 A 10 # This is the first week
B 11 # of January 2018
2018-01-14 C 12
D 13
2018-01-21 E 14
F 15
2018-01-28 G 16
H 17
2018-02-04 I 18 # This is the first week
J 19 # of February 2018
2018-02-11 A 20
B 21
2018-02-18 C 22
D 23
2018-02-25 E 24
F 25
2018-03-04 G 26 # This is the first week
H 27 # of March 2018
2018-03-11 I 28
J 29
結果應該是
Col
Date Thing
2018-01-07 A 10 # This is the first week
B 11 # of January 2018
2018-02-04 I 18 # This is the first week
J 19 # of February 2018
2018-03-04 G 26 # This is the first week
H 27 # of March 2018
df.unstack().asfreq('M', 'ffill').stack()
Col
Date Thing
2018-01-31 G 16.0
H 17.0
2018-02-28 E 24.0
F 25.0
這在幾個層面上都是錯誤的。
'2018-01-07'
['A', 'B']
而不是['G', 'H']
。 asfreq
但這引入了nan
並轉換為float
March 2018
發生了什么 你可以做
In [384]: date = df.index.get_level_values('Date')
In [385]: firstweek = date.to_frame().groupby(date.strftime('%Y-%m')).min()['Date']
In [386]: df[date.isin(firstweek)]
Out[386]:
Col
Date Thing
2018-01-07 A 10
B 11
2018-02-04 I 18
J 19
2018-03-04 G 26
H 27
細節
In [387]: date.to_frame().groupby(date.strftime('%Y-%m')).min()
Out[387]:
Date
2018-01 2018-01-07
2018-02 2018-02-04
2018-03 2018-03-04
另類。
In [400]: fweek = df.assign(dt=date).resample('M', level='Date')['dt'].min()
In [401]: df[date.isin(fweek)]
Out[401]:
Col
Date Thing
2018-01-07 A 10
B 11
2018-02-04 I 18
J 19
2018-03-04 G 26
H 27
如果該月的第一周只是該月的前7天,則可以像這樣進行過濾
df[df.index.get_level_values(0).day <= 7]
Col
Date Thing
2018-01-07 A 10
B 11
2018-02-04 I 18
J 19
2018-03-04 G 26
H 27
除非您尋找在星期日結束的第一周,否則這種方法將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.