Ich versuche, mehrere Zeilen in meinem Panda-Datenrahmen bedingt zu aktualisieren. Hier ist meine Daten:Wie kann ich mehrere Spalten in einem Panda-Dataframe bedingt aktualisieren
df = pd.DataFrame([[1,1,1], [2,2,2], [3,3,3]], columns=list('ABC'))
ich das Update tun kann ich in zwei Schritten wollen:
df.loc[df['A'] == 1, 'B'] = df['C'] +10
df.loc[df['A'] == 1, 'A'] = df['C'] +11
Oder ich kann in einem Schritt auf konstante Werte aktualisieren:
df.loc[df['A'] == 1, ['A', 'B']] = [11, 12]
Aber ich kann Aktualisieren Sie nicht mehrere Spalten aus anderen Spalten in einem einzigen Schritt:
df.loc[df['A'] == 1, ['A', 'B']] = [df['C'] + 10, df['C'] + 11]
...
ValueError: shape mismatch: value array of shape (2,3) could not be broadcast to indexing result of shape (1,2)
Irgendwelche Ideen wie ich das machen kann?
Edit: Danke @EdChum für die einfache Lösung für den einfachen Fall - hat die Frage aktualisiert, um eine komplexere Realität zu demonstrieren.
nicht sicher, dass Sie das tun können, ist das Problem, dass die Ausrichtung auf den Spalten- und Indexnamen auftreten wird, und es ist einen skalar oder 1 erwartet -d Array für die Zuweisung – EdChum
Die Realität hier ist, dass es keine einfache Möglichkeit, dass ich weiß, um dies zu tun, sehe ich nichts falsch mit dem Aufteilen der Anweisungen in separate Zuweisungen, wenn Sie versuchen, jeder Spalte unterschiedliche Werte zuweisen – EdChum
Ich versuche um zu vermeiden, dass die (möglicherweise komplexe) Indexierungsklausel dupliziert wird. Auch wenn ich mehrere Anweisungen verwende, muss ich möglicherweise die Ergebnisse in temporären Spalten speichern und dann die Spalten A und B durch solche ersetzen, d. H. Es werden 4 Anweisungen. – Matthew