Skip to content

Commit 3376655

Browse files
committed
rm groupby(axis=1) using 2 transposes and some logic changes
1 parent 5f9e795 commit 3376655

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

proj.py

+14-13
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,26 @@
1616
def project(df):
1717
"""Compute current year-end projection.
1818
19-
Assumes original DataFrame shape, suitable for calling like:
19+
Assumes transposed DataFrame shape, suitable for calling like:
2020
```
21-
df.groupby(lambda x:x, axis=1, level=0).apply(project))
21+
df.groupby(lambda x:x, level=0).apply(project))
2222
```
23+
Transposes all operations from `project` (e.g. `df[k]` → `df.loc[k]`)
2324
"""
24-
[top_level] = df.columns.get_level_values(0).drop_duplicates()
25-
d = df.loc[:, top_level]
26-
prv_ytd = d.prv_ytd
27-
cur_ytd = d.cur_ytd
25+
[top_level] = df.index.get_level_values(0).drop_duplicates()
26+
d = df.loc[top_level]
27+
prv_ytd = d.loc['prv_ytd']
28+
cur_ytd = d.loc['cur_ytd']
2829
zero_mask = prv_ytd == 0
29-
prv_roy = d.prv_end - prv_ytd
30-
d.loc[ zero_mask, 'roy'] = (prv_roy + cur_ytd) * cur_roy_frac
31-
d.loc[~zero_mask, 'roy'] = prv_roy * (1 + cur_ytd_frac * (cur_ytd / prv_ytd - 1))
32-
d['roy'] = round(d.roy).astype(int)
33-
d['projected'] = cur_ytd + d.roy
34-
return d[['roy', 'projected']]
30+
prv_roy = d.loc['prv_end'] - prv_ytd
31+
d.loc['roy', zero_mask] = (prv_roy + cur_ytd) * cur_roy_frac
32+
d.loc['roy', ~zero_mask] = prv_roy * (1 + cur_ytd_frac * (cur_ytd / prv_ytd - 1))
33+
d.loc['roy'] = round(d.loc['roy'])
34+
d.loc['projected'] = cur_ytd + d.loc['roy']
35+
return d.loc[['roy', 'projected']].astype(int) # casting d.loc['roy'] above doesn't work, for some reason
3536

3637

3738
# Compute projections
38-
proj = df.groupby(lambda x: x, axis=1, level=0).apply(project)
39+
proj = df.T.groupby(lambda x: x, level=0).apply(project).T
3940
print(proj)
4041
proj.to_csv('proj.csv')

0 commit comments

Comments
 (0)