我正在处理一个大型数据集,我需要查看同一列中的下一行值是否大于当前值。然后保存1或-1。因此,如果col d中的当前行为1并且同一col中的下一个值为2,则它将在同一行和相同数据帧中的新列('e)上保存1。问题是它总是保存一个值。
{{1}}
答案 0 :(得分:1)
为简单起见,假设您的数据框只有一列。
np.random.seed(14) # so you can reproduce
df = pd.DataFrame(np.random.randn(10, 1), columns=['a'])
df.head()
---------
a
---------
1.331587
1.331587
0.715279
-1.545400
-0.008384
0.621336
您可以使用shift()
来延迟(或领导)数据。
df['a_new'] = df.shift(periods=1).fillna(0.0)
df.head()
---------------------
a a_new
---------------------
1.331587 0.000000
0.715279 1.331587
-1.545400 0.715279
-0.008384 -1.545400
0.621336 -0.008384
然后使用列表理解来获取1
和-1
。
df['a_flags'] = [1 if x > y else -1 for x, y in zip(df.a, df.a_new)]
df.head()
-------------------------------
a a_new a_flag
-------------------------------
1.331587 0.000000 1
0.715279 1.331587 -1
-1.545400 0.715279 -1
-0.008384 -1.545400 1
0.621336 -0.008384 1