Does this help?
import pandas as pd
import numpy as np
from datetime import datetime
sp_500 = pd.DataFrame(pd.read_csv("sp500_historical.csv"))
print(f'\nsp_500:\n{sp_500}')
sp_500['date'] = pd.to_datetime(sp_500['date'])
print(f'\nsp_500:\n{sp_500}')
logret = np.log(sp_500['Close'] / sp_500['Close'].shift(1))
print(f'\nlogret:\n{logret}')
date = []
d0 = sp_500.date
print(f'\nd0:\n{d0}')
for i in range(0, len(logret)):
date.append(d0[i].strftime("%Y"))
print(f'\ndate:\n{date}')
y = pd.DataFrame(logret, date, columns=['ret_annual'])
print(f'\ny:\n{y}')
ret_annual = np.exp(y.groupby(y.index).sum()) - 1
print(f'\nret_annual:\n{ret_annual}')
ret_annual.head()
Output:
sp_500:
date Close
0 12/01/1927 251.66
1 01/01/1928 250.37
2 02/01/1928 248.84
3 03/01/1928 277.96
4 04/01/1928 284.74
5 05/01/1928 286.66
6 06/01/1928 275.94
7 07/01/1928 280.12
8 08/01/1928 300.88
9 09/01/1928 301.25
10 10/01/1928 310.74
11 11/01/1928 348.01
12 12/01/1928 351.05
13 01/01/1929 371.09
14 02/01/1929 368.93
15 03/01/1929 370.21
16 04/01/1929 378.39
17 05/01/1929 360.06
18 06/01/1929 395.17
19 07/01/1929 411.54
20 08/01/1929 451.87
21 09/01/1929 429.78
22 10/01/1929 344.14
23 11/01/1929 298.11
24 12/01/1929 307.44
25 01/01/1930 328.56
26 02/01/1930 337.58
27 03/01/1930 352.28
28 04/01/1930 361.07
29 05/01/1930 357.24
... ... ...
1053 09/01/2015 1989.15
1054 10/01/2015 2156.30
1055 11/01/2015 2161.55
1056 12/01/2015 2129.79
1057 01/01/2016 2019.79
1058 02/01/2016 2009.52
1059 03/01/2016 2131.83
1060 04/01/2016 2127.26
1061 05/01/2016 2151.48
1062 06/01/2016 2147.13
1063 07/01/2016 2227.94
1064 08/01/2016 2223.05
1065 09/01/2016 2213.80
1066 10/01/2016 2168.67
1067 11/01/2016 2244.99
1068 12/01/2016 2285.85
1069 01/01/2017 2313.05
1070 02/01/2017 2392.00
1071 03/01/2017 2388.71
1072 04/01/2017 2403.27
1073 05/01/2017 2428.68
1074 06/01/2017 2437.95
1075 07/01/2017 2487.59
1076 08/01/2017 2481.54
1077 09/01/2017 2516.84
1078 10/01/2017 2572.68
1079 11/01/2017 2644.93
1080 12/01/2017 2673.61
1081 01/01/2018 2823.81
1082 02/01/2018 2709.20
[1083 rows x 2 columns]
sp_500:
date Close
0 1927-12-01 251.66
1 1928-01-01 250.37
2 1928-02-01 248.84
3 1928-03-01 277.96
4 1928-04-01 284.74
5 1928-05-01 286.66
6 1928-06-01 275.94
7 1928-07-01 280.12
8 1928-08-01 300.88
9 1928-09-01 301.25
10 1928-10-01 310.74
11 1928-11-01 348.01
12 1928-12-01 351.05
13 1929-01-01 371.09
14 1929-02-01 368.93
15 1929-03-01 370.21
16 1929-04-01 378.39
17 1929-05-01 360.06
18 1929-06-01 395.17
19 1929-07-01 411.54
20 1929-08-01 451.87
21 1929-09-01 429.78
22 1929-10-01 344.14
23 1929-11-01 298.11
24 1929-12-01 307.44
25 1930-01-01 328.56
26 1930-02-01 337.58
27 1930-03-01 352.28
28 1930-04-01 361.07
29 1930-05-01 357.24
... ... ...
1053 2015-09-01 1989.15
1054 2015-10-01 2156.30
1055 2015-11-01 2161.55
1056 2015-12-01 2129.79
1057 2016-01-01 2019.79
1058 2016-02-01 2009.52
1059 2016-03-01 2131.83
1060 2016-04-01 2127.26
1061 2016-05-01 2151.48
1062 2016-06-01 2147.13
1063 2016-07-01 2227.94
1064 2016-08-01 2223.05
1065 2016-09-01 2213.80
1066 2016-10-01 2168.67
1067 2016-11-01 2244.99
1068 2016-12-01 2285.85
1069 2017-01-01 2313.05
1070 2017-02-01 2392.00
1071 2017-03-01 2388.71
1072 2017-04-01 2403.27
1073 2017-05-01 2428.68
1074 2017-06-01 2437.95
1075 2017-07-01 2487.59
1076 2017-08-01 2481.54
1077 2017-09-01 2516.84
1078 2017-10-01 2572.68
1079 2017-11-01 2644.93
1080 2017-12-01 2673.61
1081 2018-01-01 2823.81
1082 2018-02-01 2709.20
[1083 rows x 2 columns]
logret:
0 NaN
1 -0.005139
2 -0.006130
3 0.110667
4 0.024099
5 0.006720
6 -0.038113
7 0.015035
8 0.071493
9 0.001229
10 0.031016
11 0.113275
12 0.008697
13 0.055516
14 -0.005838
15 0.003463
16 0.021855
17 -0.049655
18 0.093045
19 0.040590
20 0.093488
21 -0.050121
22 -0.222225
23 -0.143586
24 0.030817
25 0.066440
26 0.027083
27 0.042624
28 0.024646
29 -0.010664
...
1053 -0.024865
1054 0.080686
1055 0.002432
1056 -0.014802
1057 -0.053030
1058 -0.005098
1059 0.059085
1060 -0.002146
1061 0.011321
1062 -0.002024
1063 0.036945
1064 -0.002197
1065 -0.004170
1066 -0.020596
1067 0.034587
1068 0.018037
1069 0.011829
1070 0.033563
1071 -0.001376
1072 0.006077
1073 0.010518
1074 0.003810
1075 0.020157
1076 -0.002435
1077 0.014125
1078 0.021944
1079 0.027696
1080 0.010785
1081 0.054657
1082 -0.041434
Name: Close, Length: 1083, dtype: float64
d0:
0 1927-12-01
1 1928-01-01
2 1928-02-01
3 1928-03-01
4 1928-04-01
5 1928-05-01
6 1928-06-01
7 1928-07-01
8 1928-08-01
9 1928-09-01
10 1928-10-01
11 1928-11-01
12 1928-12-01
13 1929-01-01
14 1929-02-01
15 1929-03-01
16 1929-04-01
17 1929-05-01
18 1929-06-01
19 1929-07-01
20 1929-08-01
21 1929-09-01
22 1929-10-01
23 1929-11-01
24 1929-12-01
25 1930-01-01
26 1930-02-01
27 1930-03-01
28 1930-04-01
29 1930-05-01
...
1053 2015-09-01
1054 2015-10-01
1055 2015-11-01
1056 2015-12-01
1057 2016-01-01
1058 2016-02-01
1059 2016-03-01
1060 2016-04-01
1061 2016-05-01
1062 2016-06-01
1063 2016-07-01
1064 2016-08-01
1065 2016-09-01
1066 2016-10-01
1067 2016-11-01
1068 2016-12-01
1069 2017-01-01
1070 2017-02-01
1071 2017-03-01
1072 2017-04-01
1073 2017-05-01
1074 2017-06-01
1075 2017-07-01
1076 2017-08-01
1077 2017-09-01
1078 2017-10-01
1079 2017-11-01
1080 2017-12-01
1081 2018-01-01
1082 2018-02-01
Name: date, Length: 1083, dtype: datetime64[ns]
date:
['1927', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1928', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1929', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1930', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1931', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1932', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1933', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1934', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1935', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1936', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1937', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1938', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1939', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1940', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1941', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1942', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1943', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1944', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1945', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1946', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1947', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1948', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1949', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1950', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1951', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1952', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1953', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1954', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1955', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1956', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1957', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1958', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1959', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1960', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1961', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1962', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1963', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1964', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1965', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1966', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1967', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1968', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1969', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1970', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1971', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1972', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1973', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1974', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1975', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1976', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1977', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1978', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1979', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1980', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1981', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1982', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1983', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1984', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1985', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1986', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1987', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1988', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1989', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1990', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1991', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1992', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1993', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1994', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1995', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1996', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1997', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1998', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '1999', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2001', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2002', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2003', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2004', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2005', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2006', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2007', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2008', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2009', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2010', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2011', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2012', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2013', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2014', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2015', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2016', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2017', '2018', '2018']
y:
ret_annual
1927 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1928 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1929 NaN
1930 NaN
1930 NaN
1930 NaN
1930 NaN
1930 NaN
... ...
2015 NaN
2015 NaN
2015 NaN
2015 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2016 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2017 NaN
2018 NaN
2018 NaN
[1083 rows x 1 columns]
ret_annual:
ret_annual
1927 NaN
1928 NaN
1929 NaN
1930 NaN
1931 NaN
1932 NaN
1933 NaN
1934 NaN
1935 NaN
1936 NaN
1937 NaN
1938 NaN
1939 NaN
1940 NaN
1941 NaN
1942 NaN
1943 NaN
1944 NaN
1945 NaN
1946 NaN
1947 NaN
1948 NaN
1949 NaN
1950 NaN
1951 NaN
1952 NaN
1953 NaN
1954 NaN
1955 NaN
1956 NaN
... ...
1989 NaN
1990 NaN
1991 NaN
1992 NaN
1993 NaN
1994 NaN
1995 NaN
1996 NaN
1997 NaN
1998 NaN
1999 NaN
2000 NaN
2001 NaN
2002 NaN
2003 NaN
2004 NaN
2005 NaN
2006 NaN
2007 NaN
2008 NaN
2009 NaN
2010 NaN
2011 NaN
2012 NaN
2013 NaN
2014 NaN
2015 NaN
2016 NaN
2017 NaN
2018 NaN
[92 rows x 1 columns]