Pandas Dataframe分为几周

时间:2013-08-09 09:14:29

标签: python pandas

我在将数据帧重塑为几周时遇到了问题,这样我就可以轻松地查看一个特定的星期,但也可以将星期几聚合在一起,即周一+周一,周二+周二等。

我已经在文档中查找了一种方法,但我找不到适用于我的解决方案。我的数据分辨率为1分钟,持续时间为4个月,该系列在某些地方缺少数据。

目前我提出了类似的内容:

def week_reshaping(df):
    # Define constant for offsetting the loop
    offset = pd.DateOffset(days=7)

    # Number of weeks within the df
    weeks = (df.index[-1] - df.index[0]).days // 7

    d_datetime = df.index[0]
    df_week = pd.DataFrame()
    for week in range(1, weeks + 1):
        start = df.index.searchsorted(d_datetime)
        end = df.index.searchsorted(offset + d_datetime)

        # Assign this somehow
        df.ix[start:end]

        d_datetime += offset

    return df_week 

1 个答案:

答案 0 :(得分:5)

我不完全确定你的目标是什么,但你绝对应该考虑使用groupby而不是for循环(这会更快)。

您可以按周(从DatetimeIndex)分组:

In [1]: rng = pd.date_range('2013', freq='D', periods=10)

In [2]: df = pd.DataFrame(np.random.randn(10), rng)

In [3]: df.index.week
Out[3]: array([32, 32, 32, 33, 33, 33, 33, 33, 33, 33], dtype=int32)

In [4]: df.groupby(df.index.week).sum()
Out[4]:
           0
32  3.600673
33  0.791545

同样,你可以按天(一周)分组:

In [5]: df.groupby(df.index.dayofweek).sum()
Out[5]:
          0
0  1.268307
1  0.387322
2  1.416948
3 -0.380844
4  1.464068
5  0.030965
6  0.205453

或更复杂的数组派生自......

我认为你可以apply在这里使用不同的功能(而不是总和)来达到预期的效果。