[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