2016-07-07 150 views
1

我有如下一個數據幀新的變量:創建基於GROUPBY在Python

I/P:

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 

我需要做下面讓我的O/P:

  1. 遍歷ID + +天的組合(組)開始+位置
  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 

我知道我可以通過功能使用羣體,但不是如何遍歷和技術的方式增量能夠想到。

任何人都可以引導我嗎?

謝謝。

回答

0

groupby

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

enter image description here

使用cumsum超過match然後在另一個groupby

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

enter image description here

+0

謝謝piRsq使用last uared.Seems工作正常。我將處理大型數據集並讓您知道是否有任何問題。 – marupav