I have a DataFrame
and need to calculate percent change compared to the beginning of the year by companies. Is there any way to use pct_change()
or other method to perform this task? Thanks!
df
looks like
security date price
IBM 1/1/2016 100
IBM 1/2/2016 102
IBM 1/3/2016 108
AAPL 1/1/2016 1000
AAPL 1/2/2016 980
AAPL 1/3/2016 1050
AAPL 1/4/2016 1070
results I want
security date price change
IBM 1/1/2016 100 NA
IBM 1/2/2016 102 2%
IBM 1/3/2016 108 8%
AAPL 1/1/2016 1000 NA
AAPL 1/2/2016 980 -2%
AAPL 1/3/2016 1050 5%
AAPL 1/4/2016 1070 7%
Sounds like you are looking for an expanding_window
version of pct_change()
. This doesn't exist out of the box AFAIK, but you could roll your own:
df.groupby('security')['price'].apply(lambda x: x.div(x.iloc[0]).subtract(1).mul(100))
This works, assuming you're already ordered by date within each possible grouping.
def pct_change(df):
df['pct'] = 100 * (1 - df.iloc[0].price / df.price)
return df
df.groupby('security').apply(pct_change)
来源:https://stackoverflow.com/questions/35090498/how-to-calculate-percent-change-compared-to-the-beginning-value-using-pandas