Ho uno DataFrame
che contiene valori di magazzino.Nuova colonna in base alla selezione condizionale dai valori di 2 altre colonne in un DataFrame di Pandas
Ecco come si presenta:
>>>Data Open High Low Close Volume Adj Close Date
2013-07-08 76.91 77.81 76.85 77.04 5106200 77.04
Quando provo a fare una nuova colonna condizionale con la seguente if:
Data['Test'] =Data['Close'] if Data['Close'] > Data['Open'] else Data['Open']
ottengo il seguente errore:
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()
Ho quindi utilizzato a.all()
:
Data[1]['Test'] =Data[1]['Close'] if all(Data[1]['Close'] > Data[1]['Open']) else Data[1]['Open']
Il risultato è stato che è stata selezionata l'intera colonna ['Open']
. Non ho ottenuto la condizione che volevo, ovvero selezionare ogni volta il valore più grande tra le colonne ['Open']
e ['Close']
.
Qualsiasi aiuto è apprezzato.
Grazie.
dove ho '' df ['B'] '' puoi inserire uno scalare (ad es. 'Chiudi'), anche se dovresti farlo in un'altra colonna (es. Colonne da cui selezioni, '' df [' A '] '' non deve essere uguale alla maschera '' df [' A ']> df [' B '] '', altrimenti otterrai una colonna flottante/stringa mista, generalmente non utile (e non efficiente per qualsiasi cosa) .Puoi anche avere un'altra colonna dove ho '' df ['B'] '' come valore di sostituzione (e i panda lo allineeranno alla colonna del selettore). FYI questo è esattamente equivalente a: '' df .loc [df ['A']> df ['B'], 'A'] = df ['B'] '' – Jeff