我有DataFrame
财务数据:
open high low close volume
date
2012-02-13 0.3476 0.3592 0.3449 0.3530 105990679
2012-02-14 0.3470 0.3528 0.3409 0.3429 131799968
2012-02-15 0.3453 0.3513 0.3365 0.3393 119421442
2012-02-16 0.3358 0.3438 0.3271 0.3438 123189697
2012-02-17 0.3488 0.3588 0.3464 0.3546 167932148
2012-02-20 0.3590 0.3682 0.3577 0.3634 127657258
2012-02-21 0.3630 0.3675 0.3524 0.3575 137016196
我目前正在分组:
agg = {'open': lambda s: s[0],
'high': lambda s: s.max(),
'low': lambda s: s.min(),
'close': lambda s: s[-1],
'volume': lambda s: s.sum()}
通过
df.groupby(lambda d: d.isocalendar()[:2]).agg(agg)
除了我的数据现在由(year, week)
元组索引的事实之外,这很有效。我希望数据能够按照该组最早成员的日期编制索引。我目前的黑客行为是:
agg['date'] = lambda s: s[0]
df2 = df.copy()
df2['date'] = df2.index
df2.groupby(lambda d: d.isocalendar()[:2]).agg(agg).set_index('date')
这似乎有效,但我想知道是否有分离分组和索引的方法,以便组键不会自动成为帧索引。
答案 0 :(得分:2)
据我所知,你所寻找的分离并不存在,但...... 假设索引已经排序(对于 hack 也是必需的),对groupby函数的一点改动就可以满足您的需求。
In [194]: cache = {}
In [195]: df.groupby(lambda d: cache.setdefault(d.isocalendar()[:2], d)).agg(agg)
Out[195]:
close high low open volume
2012-02-13 0.3546 0.3592 0.3271 0.3476 648333934
2012-02-20 0.3575 0.3682 0.3524 0.3590 264673454