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

ここであなたの目的が何であるかは完全にはわかりませんが、for ループではなくgroupbyを使用することを検討する必要があります (はるかに高速になります)。

週ごとにグループ化できます (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 に答える