Ich habe eine DataFrame
, die Aktienwerte enthält.Neue Spalte basierend auf bedingter Auswahl aus den Werten von 2 anderen Spalten in einem Pandas DataFrame
Es sieht wie folgt aus:
>>>Data Open High Low Close Volume Adj Close Date
2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04
Wenn ich versuche, eine bedingte neue Spalte mit der machen folgende if-Anweisung:
Data['Test'] =Data['Close'] if Data['Close'] > Data['Open'] else Data['Open']
ich die folgende Fehlermeldung erhalten:
Traceback (most recent call last):
File "<pyshell#116>", line 1, in <module>
Data[1]['Test'] =Data[1]['Close'] if Data[1]['Close'] > Data[1]['Open'] else Data[1]['Open']
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
habe ich dann a.all()
:
Data[1]['Test'] =Data[1]['Close'] if all(Data[1]['Close'] > Data[1]['Open']) else Data[1]['Open']
Das Ergebnis war, dass die gesamte ['Open']
Spalte ausgewählt wurde. Ich habe nicht die Bedingung bekommen, die ich wollte, nämlich jedes Mal den größten Wert zwischen den ['Open']
und ['Close']
Spalten auszuwählen.
Jede Hilfe wird geschätzt.
Danke.
wo ich habe '' df ['B'] '' Sie können einen Skalar (zB 'Schließen') setzen, obwohl Sie dies in einem anderen coulumn tun sollten (zB Spalten, aus denen Sie selektieren, '' df [' A '] '' muss nicht mit der Maske '' df [' A ']> df [' B '] '' übereinstimmen, sonst erhalten Sie eine gemischte Float/String-Spalte, die normalerweise nicht nützlich ist (und nicht Effizient für alles. Sie können auch eine andere Spalte haben, in der ich '' df ['B'] '' als Ersatzwert habe (und Pandas werden es auf die Spalte selector ausrichten). FYI das ist genau gleichbedeutend mit: '' df .loc [df ['A']> df ['B'], 'A'] = df ['B'] " – Jeff