在 Pandas 中计算 Rolling Geomean window 就像在 EXCEL 中计算一样
Calculate Rolling Geomean window in Pandas like it is calculated in EXCEL
在 EXCEL 中,在 Col1 上计算大小为 2 的几何平均值,将导致 Geo_2 的第 1 行中为 6,因为 4 和 9 的几何平均值为 6。在 Pandas 或 numpy 它似乎是相反的,min_period = 1,第一行反映了仅 1 个值的计算,后续计算使用 Col1 的前一行和当前行来计算几何均值。
我希望计算 window 是 col1 的当前行和下一行,因此 Geo_2 的第一个值是 6,最后一个值应该是 2。
DASeries = [4,9,3,3,5,7,8,4,2]
import numpy as np
import pandas as pd
from scipy.stats.mstats import gmean
DA_df = pd.DataFrame(DASeries)
geoMA2 = [2,3]
geo_df = pd.DataFrame([pd.Series(DASeries).rolling(window =elem, min_periods = 1).apply(gmean, raw =True) for elem in geoMA2]).T
Final = pd.concat([DA_df,geo_df],axis=1)
labs = ['Col1','Geo_2','Geo_3']
Final.columns = labs
Final
使用.iloc[::-1]
pd.Series(DASeries).iloc[::-1].rolling(window =2, min_periods = 1).apply(gmean).iloc[::-1]
0 6.000000
1 5.196152
2 3.000000
3 3.872983
4 5.916080
5 7.483315
6 5.656854
7 2.828427
8 2.000000
dtype: float64
在 EXCEL 中,在 Col1 上计算大小为 2 的几何平均值,将导致 Geo_2 的第 1 行中为 6,因为 4 和 9 的几何平均值为 6。在 Pandas 或 numpy 它似乎是相反的,min_period = 1,第一行反映了仅 1 个值的计算,后续计算使用 Col1 的前一行和当前行来计算几何均值。 我希望计算 window 是 col1 的当前行和下一行,因此 Geo_2 的第一个值是 6,最后一个值应该是 2。
DASeries = [4,9,3,3,5,7,8,4,2]
import numpy as np
import pandas as pd
from scipy.stats.mstats import gmean
DA_df = pd.DataFrame(DASeries)
geoMA2 = [2,3]
geo_df = pd.DataFrame([pd.Series(DASeries).rolling(window =elem, min_periods = 1).apply(gmean, raw =True) for elem in geoMA2]).T
Final = pd.concat([DA_df,geo_df],axis=1)
labs = ['Col1','Geo_2','Geo_3']
Final.columns = labs
Final
使用.iloc[::-1]
pd.Series(DASeries).iloc[::-1].rolling(window =2, min_periods = 1).apply(gmean).iloc[::-1]
0 6.000000
1 5.196152
2 3.000000
3 3.872983
4 5.916080
5 7.483315
6 5.656854
7 2.828427
8 2.000000
dtype: float64