2012-08-13 119 views
3

我有財務數據的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') 

這似乎不過工作,我想知道是否有分離的分組和索引,使按鍵組不會自動成爲幀索引的一種手段。

回答

2

據我知道你正在尋找不存在的分離 - ,但是...... 假設該指數的排序(這還需要與破解)到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