pandas groupby顺序转换

时间:2016-04-27 17:06:27

标签: python pandas

我有一个spring.factories,我想利用pd.DataFrame并进行多次转换。

设置

groupby

import pandas as pd import numpy as np np.random.seed(314) dti = pd.date_range('2013-01-31', '2015-12-31', freq='M') quarter = pd.Series(dti[::3], index=dti[::3], name='quarter') quarter = quarter.reindex(dti).notnull().cumsum() idx = pd.MultiIndex.from_tuples(zip(dti, quarter)) nda = np.random.randn(len(idx), 3) / 100 + 1.001 df = pd.DataFrame(nda, index=idx, columns=['A', 'B', 'C']) 看起来像这样

df

问题

我正在运行此代码,感觉效率低下。有没有方法来组合这些转换?

print df.head(12)

                     A         B         C
2013-01-31 1  1.002661  1.008820  1.009523
2013-02-28 1  0.993929  0.991683  1.009867
2013-03-31 1  0.998782  1.004817  0.993274
2013-04-30 2  1.009630  0.998187  0.991681
2013-05-31 2  0.996015  1.008643  1.002915
2013-06-30 2  0.994812  1.017657  1.018382
2013-07-31 3  1.012822  1.012194  0.982339
2013-08-31 3  0.994636  0.993391  1.027641
2013-09-30 3  1.002682  1.002814  1.014214
2013-10-31 4  1.005378  1.002968  0.985704
2013-11-30 4  0.997625  0.991386  0.998687
2013-12-31 4  0.989528  0.996771  1.014305

1 个答案:

答案 0 :(得分:0)

这刚刚发生在我身上

解决方案

apply对象上使用groupby方法。我想要应用的功能是:

seq_transform = lambda x: x.cumprod().shift().fillna(method='bfill')

然后运行

df.groupby(level=1).apply(seq_transform)