2017-10-23 1 views
1

ich eine Pivot-Tabelle, die wie folgt aussieht:hinzufügen Spalt mit geometrischem Mittel zu Pandas Pivot-Tabelle

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.
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 

Wie kann ich eine Spalte mit dem geometrischen Mittel hinzufügen (scipy Gmean verwenden)?

+0

Ich kann Ihren Pivot-Code verbessern, können Sie ihn zur Frage hinzufügen? Wie bekommen Sie Daten in Frage? Vielen Dank. – jezrael

+0

hinzugefügt die Pivot-Tabelle Erstellungslinie – steff

Antwort

2

Ich werde erraten, dass diese Erträge sind und dass Sie die durchschnittliche monatliche Rendite zu finden. In diesem Fall müssen Sie 1 zuerst an, dann gmean, dann 1 subtrahieren ... und 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..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 

jedoch verwenden, können Sie dies tun können, ohne gmean zu verwenden und auch für nulls Buchhaltung.

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..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 
+0

Math guy;) Also 'gmean' ist nur falsch? Oder hängt es davon ab, was OP braucht? – jezrael

+2

Kann nicht mit negativen Werten arbeiten. Ich sehe Monate und kleine Zahlen, die um null schwanken, und ich denke, dass sie zurückkehren. Die geometrische Rückkehr verstärkt nur meine Annahme. Also füge ich eins hinzu und alles ergibt Sinn. Ich könnte mich irren, aber ... wir werden sehen. – piRSquared

+0

ja in der Tat. Sie sind zurück und du hast Recht. danke – steff

2

Verwendung:

from scipy.stats.mstats import gmean 

piv['Gmean'] = gmean(piv, axis=1) 

Für entfernen MultiIndex in Spalten entfernen []:

piv = pd.pivot_table(result, values='mthly', index='year', columns='month') 
Verwandte Themen