Pandas: Werte einer Zelle verschieben wenn Bedingung erfüllt. Lambda Funktion
Verfasst: Montag 7. September 2020, 08:58
Ich benutze pandas in python3. In einem Dataframe mit drei Spalten (col_X, col_Y and col_Z) sind die ersten beiden Spalten (col_X, col_Y) komplett gefüllt, die dritte nur teilweise. Ich möchte die Werte aus der mittelern Spalte (col_Y) in die Nachbarspalte (col_Z) verschieben unter der Bedingung, dass sie leer ist, bzw. in ihr ist "-". Dann den Ursprung löschen. Hilfsweise habe ich eine Spalte col_K eingeführt die als Zwischenlager dient.
Sind also drei Werte vorhanden mache nichts, gehe zur nächsten Zeile, sind zwei Zellen gefüllt, kopiere den mittleren Wert nach rechts, lösche alten Wert, also lasse die mittlere frei und gehe zur nächsten Zeile. Die Liste ist sehr lang, daher soll der Zellenwechsel durch die Spaltenbereiche durchlaufen. Versucht habe ich bisher map, applymap, apply, lambda, conditional. Es wird immer nur die mittlere Spalte kopiert, nicht aber die else Bedingung ausgeführt. Auch die loc Funktion hat in der unten dargestellten Form nicht funktioniert.
Bilder der Tabellen:
Ausgangstabelle:
Gewünschte Tabelle:
Die loc Funktion hat auch nicht geholfen:
Sind also drei Werte vorhanden mache nichts, gehe zur nächsten Zeile, sind zwei Zellen gefüllt, kopiere den mittleren Wert nach rechts, lösche alten Wert, also lasse die mittlere frei und gehe zur nächsten Zeile. Die Liste ist sehr lang, daher soll der Zellenwechsel durch die Spaltenbereiche durchlaufen. Versucht habe ich bisher map, applymap, apply, lambda, conditional. Es wird immer nur die mittlere Spalte kopiert, nicht aber die else Bedingung ausgeführt. Auch die loc Funktion hat in der unten dargestellten Form nicht funktioniert.
Bilder der Tabellen:
Ausgangstabelle:
Gewünschte Tabelle:
Code: Alles auswählen
import pandas as pd
df = pd.read_csv("C:/DATA/daten/shift_value_if.csv",
sep=";",
decimal=",",
usecols=["col_X", "col_Y", "col_Z"])
df['col_K'] = df['col_Y'].apply(lambda x: 'col_Z' if x == '-' else x)
print(df)
Code: Alles auswählen
df.loc[df['col_Z'] == '-', 'col_Z'] = df['col_Y']