Question Details

No question body available.

Tags

python pandas

Answers (1)

Accepted Answer Available
Accepted Answer
April 12, 2025 Score: 2 Rep: 15,279 Quality: High Completeness: 100%

Here's one approach:

cols = ['employeeID', 'groupName', 'vestingyear', 'agreementDate']

out = ( df.merge( df.groupby(cols)['vesting
valueCAD'].sum() .groupby(cols[:-1]).cumsum() .rename('totalvestingvalueCAD'), on=cols ) .assign( totalvestingvalueCAD=lambda x: x['totalvestingvalueCAD'] - x['vestingvalueCAD'] ) )

Output:

   employeeID groupName  agreementID agreementDate  trancheID  vestingyear  \
0           2         A            7    2025-03-01         28          2025   
1           2         A            7    2025-03-01         29          2026   
2           2         A            1    2025-04-01         26          2026   
3           2         A            1    2025-03-01         27          2027   
4           2         A            8    2025-02-01         30          2026   
5           2         B            9    2025-03-01         31          2026   
6           2         A            6    2025-03-01         32          2026   

vesting
valueCAD totalvestingvalueCAD 0 200 0 1 300 90 2 400 390 3 500 0 4 50 0 5 30 0 6 40 350

Explanation / Intermediates

cols = ['employeeID', 'groupName', 'vestingyear', 'agreementDate']

employeeID groupName vesting
year agreementDate 2 A 2025 2025-03-01 200 2026 2025-02-01 50 2025-03-01 340 2025-04-01 400 2027 2025-03-01 500 B 2026 2025-03-01 30 Name: vestingvalueCAD, dtype: int64
(df.groupby(cols)['vestingvalueCAD'].sum()
   .groupby(cols[:-1]).cumsum()
   .rename('totalvestingvalueCAD'))

employeeID groupName vesting
year agreementDate 2 A 2025 2025-03-01 200 2026 2025-02-01 50 2025-03-01 390 2025-04-01 790 2027 2025-03-01 500 B 2026 2025-03-01 30 Name: totalvestingvalueCAD, dtype: int64
  • Use .merge on cols to add to the original df and use .assign to correct column 'totalvestingvalueCAD' by subtracting column 'vestingvalueCAD'.
df.merge(...).loc[:, ['vestingvalueCAD', 'totalvestingvalueCAD']]

vesting
valueCAD totalvestingvalueCAD 0 200 200 # 200 - 200 = 0 1 300 390 # 390 - 300 = 90 2 400 790 # 790 - 400 = 390 3 500 500 # etc. 4 50 50 5 30 30 6 40 390