0

連続した日に行われた測定値の合計に基づいて、いくつかの計算を行う必要があります。たとえば、次のようになります。

import pandas as pd
from pandas import Series
rng = pd.date_range('1/3/2000', periods=8)
rng = rng[:4].append(rng[5:])
ts = Series(randn(7).astype('int'), index=rng)
ts

Out[1]:
2000-01-03    0
2000-01-04    0
2000-01-05    0
2000-01-06   -1
2000-01-08    0
2000-01-09   -2
2000-01-10   -1
dtype: int64

ここで連続した日の値を合計するにはどうすればよいので、次のようになりますか?

Out[2]:
2000-01-03   -1
2000-01-04   -1
2000-01-05   -1
2000-01-06   -1
2000-01-08   -3
2000-01-09   -3
2000-01-10   -3
dtype: int64

[編集] Rで解決された同様の問題

4

1 に答える 1

1

答えが見つかったので、問題はより簡単に思えます。

def ranks(series):
    """
    In an ORDERED series, this function identifies consecutive days
    giving each group an unique number identifier. Argument must be
    a pandas Series with datetime index.
    """
    td = series.index.to_series().diff()
    td[0] = timedelta64(1, 'D')
    res = []
    counter = 0
    for i in range(td.size):
        if td[i] > timedelta64(1, 'D'):
            counter += 1
        res.append(counter)
    return(Series(res, index=series.index))

ここからは、pandas groupbyが処理します。;-)

df = DataFrame({'val':ts, 'gr':ranks(ts)})
gr = DataFrame({'val':ts, 'gr':ranks(ts)}).groupby('gr')
df.merge(gr.sum(), left_on='gr', right_index=True, how='outer')

ここに画像の説明を入力

于 2013-09-11T05:50:24.720 に答える