我正在尝试添加到列表"数量"在列"今日价格"的条件下列在"目标价格"在名为active_positions的数据框中。
我尝试了以下代码:
for index, row in active_positions.iterrows():
if row['Todays Price'] >= row['Target Price']:
quantities.append(row['Quantity'])
当我尝试这个时,我收到以下错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我已经找到了其他有此问题的人,而我所看到的建议是使用"&"而不是"和",这不适用于这种情况(我不这么认为)。
我也看到了使用np.where(条件,效果-A,效果-B)的建议。这不适合我,因为我不想在列表中添加任何内容"数量"如果条件不符合,我试图做的时候:
for index, row in active_positions.iterrows():
above_target = row['Todays Price'] >= row['Target Price']
quantities.append(np.where(above_target, row['Quantity'],))
Traceback (most recent call last):
File "<ipython-input-656-9c9f6030d250>", line 3, in <module>
quantities.append(np.where(above_target, row['Quantity'],))
ValueError: either both or neither of x and y should be given
我知道我可以通过在&#34;行[&#39;数量]&#34;之后加零来解决这个问题。 np.where子句中的表达式,但就像我说的那样,我不想在数量列表中添加零。
请指教,谢谢!
答案 0 :(得分:3)
为了速度,您不应该尝试迭代数据帧。如果您只想要条件为True的Quantity
值,则可以应用如下掩码:
import pandas as pd
import numpy as np
a = {'Todays Price': [1, 2, 1, 5, 6], 'Target Price': [1, 3, 2, 4, 3],
'Quantity': [10, 11, 12, 13, 15]}
df = pd.DataFrame(a)
quantities = df[df['Todays Price'] >= df['Target Price']]['Quantity']
quantities_list = quantities.values.tolist() # For pure Python list result
# Or perhaps more clearly for the same result:
mask = df['Todays Price'] >= df['Target Price']
quantities = df[mask]['Quantity']
quantities_list = quantities.values.tolist()