熊猫:分离分组和索引

时间:2012-08-13 18:47:17

标签: python pandas

我有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')

这似乎有效,但我想知道是否有分离分组和索引的方法,以便组键不会自动成为帧索引。

1 个答案:

答案 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