[Python-de] Anfaengerfrage: Dataframe - Zeilenmittel - Spaltenmittel

Peter Otten __peter__ at web.de
Mi Jun 19 12:22:41 EDT 2019


eilfh wrote:

> Am Dienstag, 18. Juni 2019, 09:09:39 CEST schrieb Achim Herwig:
>>         for i in range(spalte_nr):
>>                 for j in range(spalte_nr):
> 
> 
> danke fürs mitdenken
> 
> 
> nach euren Hinweisen und weiteren vielen "Versuchen"
> (alles mit pandas,
> in Zeile/Spalte 0 stehen jeweils die Beschreibungen)
> 
> zeilen_anzahl = len(df.index)
> spalten_anzahl = len(df.columns)
> spalten_mittel = df.mean()
> zeilen_mittel = df.mean(axis = 1)
> 
> df1 = df

df und df1 beziehen sich auf dasselbe Objekt; wenn du eine Kopie willst:

df1 = df.copy()

> for i in range(1, spalten_anzahl + 1):
>     for j in range(1, zeilen_anzahl + 1):
>         df1.iloc[j - 1, i - 1] = df1.iloc[j -1 , i - 1]
> - spalten_mittel[i - 1]
> - zeilen_mittel[j - 1]
> + ges_mittel
> 
> 
> .... sicher nicht die eleganteste Lösung,
> aber es komm das 'raus, was ich suche

Ebenfalls per trial-and-error bin ich auf

spaltenmittel = df.mean(axis="columns")
zeilenmittel = df.mean(axis="index")
ges_mittel = df.as_matrix().mean()
df1 = (df - zeilenmittel).sub(spaltenmittel, axis="index") + ges_mittel

gekommen. Etwas übersichtlicher finde ich es, zwischendurch zu numpy zu 
wechseln:

a = df.as_matrix()
b = (a.T - a.mean(axis=1)).T - a.mean(axis=0) + a.mean()
df1 = pd.DataFrame(b, columns=df)

Statt der zweifachen Transposition ist auch

b = a - np.expand_dims(a.mean(axis=1), 1) - a.mean(axis=0) + a.mean()

möglich.



Mehr Informationen über die Mailingliste python-de