gpt4 book ai didi

python - 对多重索引重新采样

转载 作者:行者123 更新时间:2023-12-01 01:41:57 25 4
gpt4 key购买 nike

我有一个带有MultiIndexDataFrame。第一级是具有每周频率的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

这在几个层面上都是错误的。

  1. 日期是实际月末,而不是观察到的实际日期。
  2. 事情的日期不正确。请注意,我想要 '2018-01-07' 中的 ['A', 'B'] 而不是 ['G', 'H']
  3. 我正在拆栈以使自己能够使用 asfreq,但这会引入 nan 并转换为 float
  4. 我不知道 2018 年 3 月发生了什么

最佳答案

你可以做

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

关于python - 对多重索引重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com