2

我在将数据框改造成几周时遇到问题,这样我就可以轻松查看特定的一周,但也可以将工作日汇总在一起,即星期一 + 星期一、星期二 + 星期二等。

我在文档中查看了一种方法,但我找不到适合我的解决方案。我的数据的分辨率为 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 
4

1 回答 1

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在这里使用不同的功能(而不是求和)来达到预期的结果。

于 2013-08-09T10:47:36.627 回答