Python pandas 比较最后两行的值并执行操作

Python pandas Compare values of the last two rows and perform action

我有一个 pandas 系列,如图所示

我想比较最后两行“Total”和“SMA20”的值来执行一个操作。 (请注意 Pandas 数据框很大,我只粘贴最后一行)

myData = {'Date':[2022-01-17 15:27:00+05:30], 'total': [200],
      '20SMA': [220]
      }

我尝试通过以下操作将它们存储在两个单独的变量中

last_sma = myData['SMA20'].iloc[-1:]
last_total = myData['Total'].iloc[-1:]

然后尝试比较两者,

if last_sma > last_total:
print('SMA is large')

我收到以下错误。

Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

当我尝试查看变量内容时,其显示如下

日期 2022-01-17 15:27:00+05:30 215.155 名称:SMA20,数据类型:float64

其pandas系列

欢迎使用 Whosebug!

你制作切片的方式得到的是 pandas Series

last_sma = myData['SMA20'].iloc[-1:]  # last_sma is a single value Series
last_total = myData['Total'].iloc[-1:]  # last_total is a single value Series

myData['SMA20'] returns 一个 Series 保存来自列 SMA20 的数据,.iloc[-1:] returns 这个 Series,只有一条记录,但是 Series

将 2 个系列与 > 运算符 returns 另一个 Series 进行比较,保存每对记录的真假值进行比较。在你的情况下,它包含一个具有单个 true 或 false 值的系列。

如您收到的错误消息所述,尝试将布尔值 Series 折叠为单个布尔值的定义不明确 - 即使您的 Series 包含单个记录。

如果您只需要比较最后一个值,让代码正常工作的一种简单方法是删除切片中的 :

last_sma = myData['SMA20'].iloc[-1]  # returns the single value at location -1
last_total = myData['Total'].iloc[-1] # returns the single value at location -1

if last_sma > last_total:
print('SMA is large')  # should work now!