Pandas - bedingt wählen Sie Spalte Quelle von Daten für eine neue Spalte basierend auf Zeile Wert
Gibt es eine Pandabären-Funktion, die ermöglicht die Auswahl aus verschiedenen Spalten auf Grundlage einer Bedingung? Dies ist Analog zu einer CASE-Anweisung in einem SQL-Select-Klausel. Zum Beispiel, sagen, ich habe das folgende DataFrame:
foo = DataFrame(
[['USA',1,2],
['Canada',3,4],
['Canada',5,6]],
columns = ('Country', 'x', 'y')
)
Ich wollen, wählen Sie aus der Spalte 'x' bei Land=='USA', und aus der Spalte 'y' bei Land=='Kanada', was in etwa wie folgt aus:
Country x y z
0 USA 1 2 1
1 Canada 3 4 4
2 Canada 5 6 6
[3 rows x 4 columns]
Wo kommt die Spalte
z wäre das "combined" - Spalte ab Spalte x oder y je nach Land
z
kommen?z wäre das "combined" - Spalte ab Spalte x oder y je nach Land
InformationsquelleAutor aensm | 2014-05-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
DataFrame.wo
'sother
argument undpandas.concat
:Wenn Sie wollen
z
als Spalte name, geben Siekeys
:InformationsquelleAutor falsetru
Dieser funktionieren würde:
Können Sie
loc
:BEARBEITEN
Zwar unhandlich mit
loc
wird eine bessere Skalierung mit größeren dataframes als die gelten, die hier genannt wird, für jede Zeile, während mit Hilfe der booleschen Indizierung wird vektorisiert.Der andere Weg wäre, um Boolesche Indexierung siehe meine Antwort
Ich glaube nicht, dass mit loc, arbeitet seit booleschen Maskierung erzeugt immer eine Kopie des DataFrame, eher als einen Blick.
wenn Sie nur tun, 1 oder der andere , wird dies so gut funktionieren:
foo['z'] = foo['y'].where(foo['Country']=='Canada',foo['x'])
irgendwann sollten wir umsetzen IfExp für die Abfrage.
InformationsquelleAutor EdChum
Hier ist eine generische Lösung für die Auswahl beliebige Spalten ein Wert in einer anderen Spalte.
Dies hat den zusätzlichen Vorteil der Trennung der lookup-Logik in eine einfache
dict
Struktur, die macht es einfach zu ändern.Ich erweitern um eine operation, wo eine bedingte Ergebnis wird gespeichert in einem externen lookup-Struktur (
dict
)Schleife die
pd.DataFrame
für jede Spalte gespeichert, die in derdict
und die Werte in der Bedingung Tabelle, um zu bestimmen, welche Spalte zu wählenGeben, die Lektion des Lebens
A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
Jede Vorstellung, wie man es beheben?Ich würde nicht sorgen. Wir wollen, dass dies geschieht. Sie können loszuwerden, es durch hinzufügen ‘.kopieren()' Zeile, aber es ist nicht notwendig
InformationsquelleAutor Alexander McFarlane