熊猫groupby不使用for循环(如何使其更聪明)

时间:2018-12-02 20:21:39

标签: pandas dataframe time-series pandas-groupby series

假设您有一个这样的熊猫系列。

a = pd.Series(range(31),index = pd.date_range('2018-01-01','2018-01-31',freq='D'))

如果您要像这样用多索引创建分组依据数据框

data date
2018-01-01 2018-01-01 0 2018-01-02 1 2018-01-03 2 2018-01-04 3 2018-01-05 4 2018-01-02 2018-01-02 1 2018-01-03 2 2018-01-04 3 2018-01-05 4 2018-01-06 5 2018-01-03 2018-01-03 2 2018-01-04 3 2018-01-05 4 2018-01-06 5 2018-01-07 6 .....

此数据显示在第一级多重索引中,它显示原始日期时间索引。在第二层中,我们将日期缩短为5天。 例如,如果第一级是2018-01-01,则第二级是2018-01-01至2018-01-05。 如果第一级是2018-01-15,第二级是2018-01-15至2018-01-19,数据是14、15、16、17、18。

如何制作没有循环的DataFrame或系列?

1 个答案:

答案 0 :(得分:0)

使用-

import datetime as dt
first = np.repeat(a.index.values,5)
second = [ i + np.timedelta64(j,'D') for i in a.index for j in range(5)]
arrays = [first, second]
print(np.shape(second))
d=pd.DataFrame(index=pd.MultiIndex.from_arrays(arrays, names=('date1', 'date2')))

输出(d.head()

                       value
date1      date2            
2018-01-01 2018-01-01    0.0
           2018-01-02    1.0
           2018-01-03    2.0
           2018-01-04    3.0
           2018-01-05    4.0
2018-01-02 2018-01-02    1.0
           2018-01-03    2.0
           2018-01-04    3.0
           2018-01-05    4.0
           2018-01-06    5.0