我有一个熊猫系列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().
此外,我的目标是将df
和newSerie
连接为一个数据帧,但是newSerie
输出9值,因为我们无法将df
的第一个值与shitf进行比较(1)。因此,我需要将newSerie
的第一个值设为空值,以便能够进行串联。
我该怎么做?
举个例子,假设我的输入仅是Series df。我的输出应如下图所示:
答案 0 :(得分:1)
您可以使用shift
或diff
:
# 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