2016-09-01 7 views
2

Ich habe mehrere Datenrahmen mit identischen Formen/Typen, aber leicht unterschiedlichen numerischen Werten. Ich kann leicht einen neuen Datenrahmen mit dem Mittelwert aller Eingangsdatenrahmen über produzieren:effiziente Funktion zum Auffinden harmonischer Mittelwerte über verschiedene Pandas Datenrahmen

df = pd.concat([input_dataframes]) 
df = df.groupby(df.index).mean() 

ich das gleiche mit harmonischem Mittelwert (wahrscheinlich die scipy.stats.hmean Funktion) tun will. Ich habe versucht, dies zu tun mit:

.groupby(df.index).apply(scipy.stats.hmean) 

Aber das ändert die Struktur des Datenrahmens. Gibt es einen besseren Weg, oder muss ich eine längere/manuelle Implementierung verwenden? Um

illustrieren:

df_input1: 
    'a' 'b' 'c' 
'x' 1 1 2 
'y' 2 2 4 
'z' 3 3 6 

df_input2: 
    'a' 'b' 'c' 
'x' 2 2 4 
'y' 3 3 6 
'z' 4 4 8 

desired output (but w/ hmean): 
    'a' 'b' 'c' 
'x' 1.5 1.5 3 
'y' 2.5 2.5 5 
'z' 3.5 3.5 7 

Antwort

3

einen Pandas-Panel erstellen und anwenden die harmonische Mittel Funktion über die 'item' Achse.

Beispiel mit Ihrem Datenrahmen df1 und df2:

import pandas as pd 
from scipy import stats 

d = {'1':df1,'2':df2} 
pan = pd.Panel(d) 
pan.apply(axis='items',func=stats.hmean) 

ergibt:

 'a'   'b'   'c' 
'x'  1.333333 1.333333 2.666667 
'y'  2.400000 2.400000 4.800000 
'z'  3.428571 3.428571 6.857143 
+0

perfekt, danke! –

+1

Wenn das Ihnen geholfen hat, scheint es (es ist nicht im Geschmack) (http://meta.stackexchange.com/questions/88535/asking-for-someone-to-accept-your-answer/88539#88539) zu bitte dich, es als Antwort zu akzeptieren. Es hilft auch anderen Menschen, dies später zu finden, da sie sehen können, dass Ihr Problem gelöst wurde, ohne es lesen zu müssen. – vmg

+0

akzeptiert, sorry, noch ein n00b hier! –

Verwandte Themen