2016-07-07 24 views
1

でGROUPBYに基づいて新しい変数を作成します。私は私のO/Pを取得するには、以下を実行する必要があり私は以下のようにデータフレーム持っているのPython

id  day start location value match 
4413869 16080 360 5000 2 1 
4413869 16080 360 5000 3 1 
4413869 16080 360 5000 5 1 
4413869 16080 360 5000 16 1 
4413869 16080 360 5015 1 1 
4413869 16080 361 -1  1 0 
4413869 16080 361 -1  2 0 
4413869 16080 361 -1  3 0 
4413869 16080 361 -1  5 0 
4413869 16080 361 -1  16 0 
4413869 16080 362 -1  1 0 
4413869 16080 362 -1  2 0 
4413869 16080 362 -1  3 0 
4413869 16080 362 -1  5 0 
4413869 16080 362 -1  16 0 
4413869 16080 363 -1  1 0 
4413869 16080 363 -1  2 0 
4413869 16080 363 -1  3 0 
4413869 16080 363 -1  5 0 
4413869 16080 363 -1  16 0 
4413869 16080 364 -1  1 0 
4413869 16080 364 -1  2 0 
4413869 16080 364 -1  3 0 
4413869 16080 364 -1  5 0 
4413869 16080 364 -1  16 0 

I/Pを

  1. id + day + start + locationのループスルーコンビネーション(グループ)
  2. ロケーションがグループの最初/最初にある場合、new_var = 0
  3. このグループ内で一致が1の場合(最初から開始)、new_var = new_var + 1
  4. この増分は、そのグループの最後の位置まで継続する必要があります。
  5. 出力のグループの最後のレコードを書き込みます。

O/P:

id  day start loc  value match new_var 
4413869 16080 360 5000 16  1 4 
4413869 16080 360 5015 1  1 1 
4413869 16080 361 -1  16  0 0 
4413869 16080 362 -1  16  0 0 
4413869 16080 363 -1  16  0 0 
4413869 16080 364 -1  16  0 0 

私が機能して、グループを使用することができることを知っているが、技術的な方法で反復してインクリメントする方法のことではないと思います。

誰でも私を案内できますか?

ありがとうございました。あなたのgroupby

df['new_var'] = df.groupby(['id', 'day', 'start', 'location']).match.cumsum() 
df.head() 

enter image description here

match以上

答えて

0

使用cumsumは、別のgroupby

df.groupby(['id', 'day', 'start', 'location'], as_index=False).last() 

enter image description here

+0

おかげpiRsqでlastを使用しますあなたが大規模なデータセットで作業し、何か問題があるかどうかを知らせます。 – marupav

関連する問題