2016-04-28 13 views
0

与えられたパンダで時系列を集約することは、私はウィンドウサイズ

a = pandas.Series([1,2,3,4,5,6,7,8]) 

a 
Out[313]: 
0 1 
1 2 
2 3 
3 4 
4 5 
5 6 
6 7 
7 8 
dtype: int64 

このデータを持っていると言うことができます私は、一度にグループのデータn行集計データを好むし、それらを合計します。だからn=2新しいシリーズは{3,7,11,15}のようになります。

+0

あなたは{3,7,11,15}を意味しますか?奇数の要素がある場合はどうなりますか?どのようにそれらを追加する予定ですか? – Kevad

答えて

1

この試してください:あなたがパンダrolling meanを使用して、次のようにそれを得ることができ

In [39]: a.groupby(a.index//2).sum() 
Out[39]: 
0  3 
1  7 
2 11 
3 15 
dtype: int64 

In [41]: a.index//2 
Out[41]: Int64Index([0, 0, 1, 1, 2, 2, 3, 3], dtype='int64') 

のn = 3

In [42]: n=3 

In [43]: a.groupby(a.index//n).sum() 
Out[43]: 
0  6 
1 15 
2 15 
dtype: int64 

In [44]: a.index//n 
Out[44]: Int64Index([0, 0, 0, 1, 1, 1, 2, 2], dtype='int64') 
0

を: n場合は、あなたの間隔である:

sums = list(a.rolling(n).sum()[n-1::n]) 

# Optional !!! 
rem = len(a)%n 
if rem != 0: 
    sums.append(a[-rem:].sum()) 

最初の行は、データが適切な場合は完全に行を追加しますグループに分かれていれば、残りの合計を追加することもできます(あなたの好みによって異なります)。 たとえば、上記の場合、n=3の場合、{6, 15, 15}または{6, 15}のいずれかを取得することができます。上のコードは前者の場合です。オプションの部分をスキップすると、ちょうど{6, 15}となります。

関連する問題