2016-08-09 92 views
1

Wie ich folgende Funktion in mehr Pandas Art und Weise schreiben:Apply-Funktion auf jeder Spalte in einem Pandas Datenrahmen

 def calculate_df_columns_mean(self, df): 
     means = {} 
     for column in df.columns.columns.tolist(): 
      cleaned_data = self.remove_outliers(df[column].tolist()) 
      means[column] = np.mean(cleaned_data) 
     return means 

Vielen Dank für Hilfe.

+0

was tut man 'remove_outliers? – MaxU

+1

Fragen Sie, warum über die Spalten iterieren und dann Folgendes tun: 'cleaned_data = self.remove_outliers (df [Spalte] .tolist())'? das scheint, als ob Sie die Ausreißer für alle Spalten für jede Spalte wiederholt entfernen? – EdChum

+0

Ich möchte den Mittelwert für saubere Daten berechnen. –

Antwort

2

Es scheint mir, dass die Iteration über die Spalten nicht notwendig ist:

def calculate_df_columns_mean(self, df): 
    cleaned_data = self.remove_outliers(df[column].tolist()) 
    return cleaned_data.mean() 

die oben sollte ausreichen, um unter der Annahme, dass remove_outliers gibt noch eine df

BEARBEITEN

ich denke, die folgende Arbeiten:

def calculate_df_columns_mean(self, df): 
    return df.apply(lambda x: remove_outliers(x.tolist()).mean() 
+0

remove_outliers ruft Liste und gibt saubere Liste zurück. –

+0

versuchen Sie meine neue Bearbeitung, es sollte funktionieren, aber wirklich sollten Sie sich darauf konzentrieren, 'remove_outliers' zu ändern, um auf einem np-Array und wenn möglich ein' DataFrame' in einer vektorisierten Weise zu betreiben – EdChum