我试图比较panda中两列之间的股价数据,但一直收到这个错误。
"序列的真值不明确。使用a.empty、a.bool((、a.item((、.any((或.all((。'
for n in df['labels']:
if df['Open'] > df['Close']:
df['labels'] = 'green'
else:
df['labels'] = 'red'
问题是这一行-'f df['Open']>df['Close']'
尝试使用.gt((方法,但没有成功-有什么建议吗?
您正在将两整列相互比较,这是不确定的。
相反,您想要做的是比较数据帧中每一行的值。
示例df:
df = pd.DataFrame(columns=['open', 'close'], data=[[100, 105], [200, 195], [300, 301], [400, 404], [500, 499]])
例如,您可以像这样使用.itertuples((:
for row in df.itertuples():
print(row.close > row.open)
然而,数据帧的美妙之处在于,您可以同时计算多个值,并且通常不想在数据上循环。
df['labels'] = df.apply(lambda row: 'green' if row["close"] >= row["open"] else 'red', axis=1)
在这里,我创建了一个新的"标签"列,并根据打开和关闭的值将值设置为"绿色"或"红色">
最后的df看起来是这样的:
open close labels
0 100 105 green
1 200 195 red
2 300 301 green
3 400 404 green
4 500 499 red
第三种选择是像这样使用np.where
:
import numpy as np
df['labels'] = np.where(df["close"] >= df["open"], 'green', 'red')