Pandas 将具有几何平均值的列添加到数据透视表
我有一个透视表,如下所示:Pandas 将具有几何平均值的列添加到数据透视表,pandas,scipy,pivot-table,python-3.6,Pandas,Scipy,Pivot Table,Python 3.6,我有一个透视表,如下所示: piv = pd.pivot_table(result, values=['mthly'], index=['year'], columns=['month']) In [242]: piv Out[242]: mthly \ month 1 2 3 4
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)?使用:
from scipy.stats.mstats import gmean
piv['Gmean'] = gmean(piv, axis=1)
对于删除列中的删除多索引,[]:
piv = pd.pivot_table(result, values='mthly', index='year', columns='month')
使用:
对于删除列中的删除多索引,[]:
piv = pd.pivot_table(result, values='mthly', index='year', columns='month')
我猜这些都是回报,你想找到平均月回报。在这种情况下,您需要先加1,然后再减去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
我猜这些都是回报,你想找到平均月回报。在这种情况下,您需要先加1,然后再减去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
我可以改进您的pivot代码,您可以将其添加到问题中吗?你如何获得有问题的数据?谢谢。添加了数据透视表创建行。我可以改进您的数据透视代码,您可以将其添加到问题中吗?你如何获得有问题的数据?谢谢。添加了数据透视表创建lineMath guy;)所以
gmean
only是错的?或者这取决于OP需要什么?不能用负值进行gmean。我看到几个月和一些小数字在零左右波动,我认为回报率是。几何回报率只是加强了我的假设。因此,我添加了一个,这一切都是有意义的。我可能错了,但是。。。我们拭目以待。是的。他们是回报,你是对的。谢谢还有一个问题。为了获得几何回报(累积回报),我尝试了piv['Yearal']=(piv+1).cumprod(axis=1)-1,但得到了'ValueError:通过的项目数错误12,放置意味着1'。我做错了什么?数学人;)所以gmean
only是错的?或者这取决于OP需要什么?不能用负值进行gmean。我看到几个月和一些小数字在零左右波动,我认为回报率是。几何回报率只是加强了我的假设。因此,我添加了一个,这一切都是有意义的。我可能错了,但是。。。我们拭目以待。是的。他们是回报,你是对的。谢谢还有一个问题。为了获得几何回报(累积回报),我尝试了piv['Yearal']=(piv+1).cumprod(axis=1)-1,但得到了'ValueError:通过的项目数错误12,放置意味着1'。我做错了什么?