2017-09-13 5 views
1

私は以下のようになります。1つのデータフレーム持っている:私は「prev_count」と名付けられ、このデータフレームに新しい列を作成したいprebyuos月のカウントを取得するgroupby関数を適用するには?

dff = pd.DataFrame({'month': ['1','1','1','1','2','2','2','2','3','3'], 
      'sym': ['abc','pqr','xyz','lmn','abc','pqr','xyz','lmn','aaa','bbb'], 
     'count': ['10','14','25','20','34','23','43','34','10','20']}) 

dff = dff[['sym','month','count']] 
print dff 

    sym month count 
0 abc  1 10 
1 pqr  1 14 
2 xyz  1 25 
3 lmn  1 20 
4 abc  2 34 
5 pqr  2 23 
6 xyz  2 43 
7 lmn  2 34 
8 aaa  3 10 
9 bbb  3 20 

を。前月は、特定のグループで利用できない場合は、前の月がで利用可能である場合は、「prev_count」値が0

  • でなければなりません

    • :この新しいコラム「prev_count」を作成するためのルールの下に従わなければなりません特定のグループの前月カウント値は "prev_count"の値でなければなりません。

  • は、私は以下のようなGROUPBY機能でそれを試してみました:

    def f(df): 
    
        print df 
        return "" 
    
    dff['pre_count'] = dff.groupby('sym').apply(f) 
    

    しかし、私は前月のトラックカウント値を保つことができる方法を理解することができませんでしだ。彼らのパンダはデータのそのような操作を行う方法ですか?

    予想される出力:month以来

    sym month count prev_count 
    0 abc  1 10 0 
    1 pqr  1 14 0 
    2 xyz  1 25 0 
    3 lmn  1 20 0 
    4 abc  2 34 10 
    5 pqr  2 23 14 
    6 xyz  2 43 25 
    7 lmn  2 34 20 
    8 aaa  3 10 0 
    9 bbb  3 20 0 
    
    +0

    JohnGalt- [OK]を@にfillna(0)感謝 – kit

    答えて

    1

    はすでにソートされています。 JohnGalt- @shift()symグループ

    In [2878]: dff['prev_count'] = dff.groupby('sym')['count'].shift().fillna(0) 
    
    In [2879]: dff 
    Out[2879]: 
        sym month count prev_count 
    0 abc  1 10   0 
    1 pqr  1 14   0 
    2 xyz  1 25   0 
    3 lmn  1 20   0 
    4 abc  2 34   10 
    5 pqr  2 23   14 
    6 xyz  2 43   25 
    7 lmn  2 34   20 
    8 aaa  3 10   0 
    9 bbb  3 20   0 
    

    あるいは、transform

    In [2880]: dff.groupby('sym')['count'].transform(lambda x: x.shift(1)).fillna(0) 
    Out[2880]: 
    0  0 
    1  0 
    2  0 
    3  0 
    4 10 
    5 14 
    6 25 
    7 20 
    8  0 
    9  0 
    Name: count, dtype: object 
    
    +0

    を使用して、あなたが)(それはシフトの日付を検討している方法を詳細に説明していただけます。私は正しく理解していませんでした。 – kit

    関連する問題