2017-03-10 6 views
1

を使用して10行を追加する私は、次の形式のパンダでデータフレームを持っている:はラムダ、パンダ

 column 
0  0 
1  1 
2  3 
3  6 
4  10 
5  15 
6  21 
7  28 
8  36 
9  45 
10  55 
11  66 
12  78 
13  91 
14  105 
15  120 

タスクはすべての10行を合計し、合計を置くために新しい列を作成することです。結果は次のようになります。データフレーム:

 num  sum  Description(no need to add this column) 
0  0  0   sum of numbers of rows of column "num" by indexes(0) 
1  1  1   sum of numbers of rows of column "num" by indexes(0-1) 
2  3  4   sum of numbers of rows of column "num" by indexes(0-2) 
3  6  10   sum of numbers of rows of column "num" by indexes(0-3) 
4  10  20   sum of numbers of rows of column "num" by indexes(0-4) 
5  15  35   sum of numbers of rows of column "num" by indexes(0-5) 
6  21  56   sum of numbers of rows of column "num" by indexes(0-6) 
7  28  84   sum of numbers of rows of column "num" by indexes(0-7) 
8  36  120  sum of numbers of rows of column "num" by indexes(0-8) 
9  45  165  sum of numbers of rows of column "num" by indexes(0-9) 
10  55  220  sum of numbers of rows of column "num" by indexes(1-10) 
11  66  285  sum of numbers of rows of column "num" by indexes(2-11) 
12  78  360  sum of numbers of rows of column "num" by indexes(3-12) 
13  91  445  sum of numbers of rows of column "num" by indexes(4-13) 
14  105  540  sum of numbers of rows of column "num" by indexes(5-14) 
15  120  645  sum of numbers of rows of column "num" by indexes(6-15) 

ラムダの使用方法を教えてください。私はシフトを使用しようとしましたが、動作しませんでした。

答えて

4

を使用できrolling .SUMmin_periods = 1と:

df['sum'] = df.column.rolling(10, min_periods=1).sum() 
df 

enter image description here

+0

これは良い答えです、ありがとうございます。 しかし、lamdaを使ってメソッドを表示できます。私はラムダについてあまり知っていないので、lamdaの動作を理解する方が良いでしょう –

+0

残念ながら、ここでは 'lambda'が使用されるスペースはあまりないと思いますが、' df.column.rolling(10、min_periods = 1).agg(lambda x:x.sum()) 'は' lambda'の値を集約する一つの方法であるラムダ式を使います。もしあなたが 'sum'より複雑な計算をしたいのなら、これは役に立ちます。 – Psidom

+1

さて、ありがとう! –

3
In [27]: df['sum'] = df['column'].cumsum() 

In [28]: df 
Out[28]: 
    column sum 
0  0 0 
1  1 1 
2  3 4 
3  6 10 
4  10 20 
5  15 35 
6  21 56 
7  28 84 
8  36 120 
9  45 165 
10  55 220 
11  66 286 
12  78 364 
13  91 455 
14  105 560 
15  120 680 

か、これはあなたの目標に応じて:

In [31]: df['sum'] = df['column'].rolling(10).sum() 

In [32]: df['sum'] = df['sum'].fillna(df['column'].cumsum()) 

In [33]: df 
Out[33]: 
    column sum 
0  0 0.0 
1  1 1.0 
2  3 4.0 
3  6 10.0 
4  10 20.0 
5  15 35.0 
6  21 56.0 
7  28 84.0 
8  36 120.0 
9  45 165.0 
10  55 220.0 
11  66 285.0 
12  78 360.0 
13  91 445.0 
14  105 540.0 
15  120 645.0 

またはを

+0

ありがとう)このメソッドも助けました –