我有一个如下所示的数据透视表:
piv = pd.pivot_table(result, values=['mthly'], index=['year'], columns=['month'])
In [242]: piv
Out[242]:
mthly \
month 1 2 3 4 5 6 7
year
2011 NaN NaN NaN 0.015720 -0.008014 -0.006451 -0.001026
2012 0.013018 0.007193 0.007137 -0.004187 -0.026664 0.007433 0.005807
2013 0.013733 -0.005632 0.006883 0.015291 -0.016761 0.001125 0.012327
2014 -0.013709 0.021567 -0.000728 0.003813 0.004264 -0.000426 -0.000268
2015 0.003385 0.006475 -0.001917 0.000408 -0.000548 -0.009002 0.006698
2016 0.005807 0.015684 0.006622 0.005657 -0.008455 0.018942 0.011761
2017 0.007931 0.009863 0.003404 0.002660 0.011806 -0.000465 0.011023
month 8 9 10 11 12
year
2011 0.023813 -0.001507 0.002469 0.004392 -0.007492
2012 0.004825 0.006059 0.006586 0.007239 0.013538
2013 -0.010306 0.018834 0.013929 0.005148 0.009503
2014 0.010237 -0.014682 0.008420 0.001743 0.003036
2015 -0.022623 -0.006022 -0.000163 -0.000717 -0.002252
2016 -0.002300 -0.001103 -0.004923 0.003658 -0.000372
2017 0.000435 0.004498 0.004118 NaN NaN
如何添加具有几何平均值的列(使用scipy gmean)?
答案 0 :(得分:2)
使用:
from scipy.stats.mstats import gmean
piv['Gmean'] = gmean(piv, axis=1)
要删除列中的MultiIndex
,请移除[]
:
piv = pd.pivot_table(result, values='mthly', index='year', columns='month')
答案 1 :(得分:2)
我猜这些是回报,你想找到平均每月回报。在这种情况下,您需要先添加1,然后再添加gmean
,然后减去1 ...并使用axis=1
from scipy.stats.mstats import gmean
df.assign(Gmean=gmean(df + 1, axis=1) - 1)
mthly Gmean
month 1 2 3 4 5 6 7
year
2011 NaN NaN NaN 0.0157 -0.0080 -0.0065 -0.0010 NaN
2012 0.0130 0.0072 0.0071 -0.0042 -0.0267 0.0074 0.0058 0.0013
2013 0.0137 -0.0056 0.0069 0.0153 -0.0168 0.0011 0.0123 0.0038
2014 -0.0137 0.0216 -0.0007 0.0038 0.0043 -0.0004 -0.0003 0.0020
2015 0.0034 0.0065 -0.0019 0.0004 -0.0005 -0.0090 0.0067 0.0008
2016 0.0058 0.0157 0.0066 0.0057 -0.0085 0.0189 0.0118 0.0080
2017 0.0079 0.0099 0.0034 0.0027 0.0118 -0.0005 0.0110 0.0066
但是,您可以在不使用gmean
的情况下执行此操作并考虑空值。
df.assign(Gmean=df.add(1).prod(1).pow(1 / df.notnull().sum(1), 0).sub(1))
mthly Gmean
month 1 2 3 4 5 6 7
year
2011 NaN NaN NaN 0.0157 -0.0080 -0.0065 -0.0010 0.0000
2012 0.0130 0.0072 0.0071 -0.0042 -0.0267 0.0074 0.0058 0.0013
2013 0.0137 -0.0056 0.0069 0.0153 -0.0168 0.0011 0.0123 0.0038
2014 -0.0137 0.0216 -0.0007 0.0038 0.0043 -0.0004 -0.0003 0.0020
2015 0.0034 0.0065 -0.0019 0.0004 -0.0005 -0.0090 0.0067 0.0008
2016 0.0058 0.0157 0.0066 0.0057 -0.0085 0.0189 0.0118 0.0080
2017 0.0079 0.0099 0.0034 0.0027 0.0118 -0.0005 0.0110 0.0066