Basic Problem:
I have several 'past' and 'present' variables that I'd like to perform a simple percent change 'row-wise' on. For example: ((exports_now - exports_past)/exports_past))
.
These two questions accomplish this but when I try a similar method I get an error that my function deltas gets an unknown parameter axis
.
- How to apply a function to two columns of Pandas dataframe
- Pandas: How to use apply function to multiple columns
Data Example :
exports_ past exports_ now imports_ past imports_ now ect.(6 other pairs)
.23 .45 .43 .22 1.23
.13 .21 .47 .32 .23
0 0 .41 .42 .93
.23 .66 .43 .22 .21
0 .12 .47 .21 1.23
Following the answer in the first question,
My solution is to use a function like this:
def deltas(row):
'''
simple pct change
'''
if int(row[0]) == 0 and int(row[1]) == 0:
return 0
elif int(row[0]) == 0:
return np.nan
else:
return ((row[1] - row[0])/row[0])
And apply the function like this:
df['exports_delta'] = df.groupby(['exports_past', 'exports_now']).apply(deltas, axis=1)
This generates this error : TypeError: deltas() got an unexpected keyword argument 'axis'
Any Ideas on how to get around the axis parameter error? Or a more elegant way to calculate the pct change? The kicker with my problem is that I needs be able to apply this function across several different column pairs, so hard coding the column names like the answer in 2nd question is undesirable. Thanks!