FRAGEPandas DataFrame.assign Argumente
Wie kann assign
eine Kopie des ursprünglichen Datenrahmen mit mehreren neuen Spalten hinzugefügt zurückzukehren verwendet werden?
gewünschte Ergebnis
df = pd.DataFrame({'A': range(1, 5), 'B': range(11, 15)})
>>> df.assign({'C': df.A.apply(lambda x: x ** 2), 'D': df.B * 2})
A B C D
0 1 11 1 22
1 2 12 4 24
2 3 13 9 26
3 4 14 16 28
ATTEMPTS
Das obige Beispiel führt zu:
ValueError: Wrong number of items passed 2, placement implies 1
.
HINTERGRUND
Die assign
Funktion in Pandas eine Kopie des entsprechenden Datenrahmen an die neu zugeordneten Spalte verbunden dauert, z.B.
df = df.assign(C=df.B * 2)
>>> df
A B C
0 1 11 22
1 2 12 24
2 3 13 26
3 4 14 28
Die 0.19.2 documentation für diese Funktion impliziert, dass mehr als eine Spalte mit dem Datenrahmen hinzugefügt werden können.
Die Zuweisung mehrerer Spalten innerhalb derselben Zuordnung ist möglich, Sie können jedoch nicht auf andere Spalten verweisen, die innerhalb desselben Zuweisungsaufrufs erstellt wurden.
Zusätzlich:
Parameter:
kwargs: Schlüsselwort WertepaareSchlüsselwörter sind die Spaltennamen.
Der Quellcode für die Funktion fest, dass es ein Wörterbuch akzeptiert: kann
def assign(self, **kwargs):
"""
.. versionadded:: 0.16.0
Parameters
----------
kwargs : keyword, value pairs
keywords are the column names. If the values are callable, they are computed
on the DataFrame and assigned to the new columns. If the values are not callable,
(e.g. a Series, scalar, or array), they are simply assigned.
Notes
-----
Since ``kwargs`` is a dictionary, the order of your
arguments may not be preserved. The make things predicatable,
the columns are inserted in alphabetical order, at the end of
your DataFrame. Assigning multiple columns within the same
``assign`` is possible, but you cannot reference other columns
created within the same ``assign`` call.
"""
data = self.copy()
# do all calculations first...
results = {}
for k, v in kwargs.items():
if callable(v):
results[k] = v(data)
else:
results[k] = v
# ... and then assign
for k, v in sorted(results.items()):
data[k] = v
return data
Ich denke, die docs klarer sein sollte, wie diese Arbeit mit mehreren Spalten machen Mehrdeutigkeit mit einem bereitgestellten Beispiel zu vermeiden – EdChum