pandas 如何在panda Dataframe 中使用布尔条件

vsaztqbk  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(183)

我有一个Pandas数据框架(df),它有一个日期索引和1,000行,其中一行看起来像这样:

SPY           262.408051
shrtAvg       262.861718
signal              True
Name: 2019-03-22 00:00:00, dtype: object

我想做一个计算,创建一个新的列的基础上df.信号像这样。

df['distance'] = if df.signal == True, df.SPY - df.average, df.average = df.SPY

但无论我怎么尝试,总是得到这个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我已经对.bool、.apply、np.where和loc进行了trued,但都无效。例如:

`df['distance'] = np.where(df.signal, df.SPY - df.shrtAVG, df.shrtAVG -df.SPY)`

我的问题是,如何基于以布尔检查为根的计算来创建新列?

njthzxwz

njthzxwz1#

使用.loc[]可以分两步完成:

df.loc[df.signal==True, 'distance'] = df.SPY - df.shrtAVG
df.loc[df.signal==False, 'distance'] =  df.shrtAVG - df.SPY

或者,您可以使用.apply()一步完成:

df['distance'] = df.apply(lambda row: row.SPY - row.shrtAVG if row.signal==True else row.shrtAVG - row.SPY, axis=1)

相关问题