Hier ist, wie Sie diesen Fehler reproduzieren:
df = pd.DataFrame({'Roll Price': np.random.randint(1, 10, 10),
'Delta VWAP': np.random.randint(1, 10, 10)})
df
Out:
Delta VWAP Roll Price
0 7 6
1 9 1
2 9 4
3 2 4
4 7 8
5 8 4
6 8 6
7 9 3
8 2 5
9 6 8
if df['Roll Price'] > df['Delta VWAP']:
df['Result'] = 'Long'
Traceback (most recent call last):
File "<ipython-input-18-a07b1f06bd42>", line 1, in <module>
if df['Roll Price'] > df['Delta VWAP']:
File "/home/ayhan/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py", line 955, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Der Fehler aus diesem Vergleich ergibt sich: df['Roll Price'] > df['Delta VWAP']
Wenn Sie dies ausführen
df['Roll Price'] > df['Delta VWAP']
Out:
0 False
1 False
2 False
3 True
4 True
5 False
6 False
7 False
8 True
9 True
dtype: bool
Sie sehen, dass das Ergebnis nicht ein einziges True
oder False
Wert ist aber stattdessen eine Reihe von Booleans. Und der mehrdeutigen Teil ist
- Haben Sie die Spalte
Long
festlegen möchten, wenn alle Werte im Array wahr sind?
- Möchten Sie die Spalte auf
Long
10 setzen, wenn einer der Werte im Array True ist?
Es stellt sich heraus, die Antwort ist weder. Sie möchten einen elementweisen Vergleich durchführen und den entsprechenden Wert auf Long
setzen, wenn die Bedingung erfüllt ist, andernfalls auf Short
.
Dafür können Sie np.where
verwenden:
cond = df['Roll Price'] > df['Delta VWAP']
df['Result'] = np.where(cond, 'Long', 'Short')
df
Out:
Delta VWAP Roll Price Result
0 7 6 Short
1 9 1 Short
2 9 4 Short
3 2 4 Long
4 7 8 Long
5 8 4 Short
6 8 6 Short
7 9 3 Short
8 2 5 Long
9 6 8 Long
„' if (cleanedData [ 'Roll Preis (Spread)']> cleanedData [ 'Delta VWAP']) 'Sie dies nicht tun können, dass ein Vergleich zurückkehrt. ein Array von booleschen Werten, kein boolescher Wert. " Was? Vielleicht, wenn er nach 'cleanedData ['Delta VWAP'] 'ein Komma hatte –