python - Running sum of most recent members of each group -


here input dataframe:

  id  val 0     1 1  b    2 2    -3 3  c    1 4  d    5 5  b    6 6  c   -2 

i group entries id, , calculate running sum of recent members of each group seen point. here how desired output like, explanations how obtained:

  id  val  out 0     1   1 1  b    2   3   (2 + 1) 2    -3   -1  (-3 + 2)   3  c    1   0   (1+ -3 +2) 4  d    5   5   (5 + 1 + -3 + 2_ 5  b    6   9   (6 + 5 + 1 + -3) 6  c   -2   6    (-2 + 6 + 5 -3) 

here more detailed explanations: 1) row id=1 has 3=2+1, because @ time have 2 groups, , bs, each 1 row, have take single row each group.

2) row id=2 has -1=-3+2 because @ time, have 2 groups, , bs. recent row 2 -3 , single (and recent) row bs 1 b 2, add these 2 rows.

3) in row id=6, add up

2    -3 4  d    5 5  b    6 6  c   -2 

you taking 1 row each group, , row recent @ point.

this should relatively quick , easy way using loop. way works adds new entry dictionary whenever finds one. if entry exists overwrites corresponding value.

df = pd.dataframe({'id': ['a','b','a','c','d','b','c'],                   'val': [1,2,-3,1,5,6,-2]})  num_rows = df.shape[0]  last_vals = {} in range(0, num_rows):     x = df['id'][i]     last_vals[x] = df['val'][i]  sum(last_vals.values()) 

Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -