首页 > 解决方案 > 熊猫系列移位和条件返回系列的真值不明确

问题描述

我有一个df包含 10 个值(所有双精度值)的熊猫系列。我的目标是创建一个新的系列如下。

   newSerie = 1 if df > df.shift(1) else 0

换句话说newSerie,如果 的当前值df大于其先前值,则输出 1(否则应输出 0)。

但是,我得到:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

此外,在我的目标是连接dfnewSerie作为数据帧之后,但newSerie输出 9 值,因为我们无法将第一个值df与 shitf(1) 进行比较。因此,我需要第一个值为newSerie空值才能进行连接。

我怎样才能做到这一点?

举个例子,假设我的输入只是系列 df。我的输出应该如下图所示:

在此处输入图像描述

标签: pandasiterationconditional-statementsseriesshift

解决方案


您可以使用shiftdiff

# example dataframe:
data = pd.DataFrame({'df':[10,9,12,13,14,15,18,16,20,1]})

   df
0  10
1   9
2  12
3  13
4  14
5  15
6  18
7  16
8  20
9   1

使用Series.shift

data['NewSerie'] = data['df'].gt(data['df'].shift()).astype(int)

或者Series.diff

data['NewSerie'] = data['df'].diff().gt(0).astype(int)

输出

   df  NewSerie
0  10         0
1   9         0
2  12         1
3  13         1
4  14         1
5  15         1
6  18         1
7  16         0
8  20         1
9   1         0

推荐阅读