我在时间序列中有多个具有相同值的行,并希望在时间序列中返回1步。我不能使用shift,因为它不知道重复的时间值。
我知道这不起作用,但我只是为了说明我的目的。
ot['pastvalue'] = ot(['time'] - 1)['somevalue']
如果不清楚,这是一个直接来自代码的更详细的例子。其中一些行具有相同的值,但它们在其他列中包含唯一数据。即使进行排序,具有唯一或非唯一时间的行数也是任意的。因此,执行一个简单的DataFrame.shift(x)将无法实现目标,再次只是从上一个时间步骤中检索一个值。
ot['time'].head()
Out[140]:
0 2015010112
1 2015010112
2 2015010111
3 2015010111
4 2015010111
Name: time, dtype: int64
答案 0 :(得分:0)
假设你从这样的事情开始:
import pandas as pd
df = pd.DataFrame({'a': [1, 1, 2, 3, 2], 'b': range(5)})
>>> df
a b
0 1 0
1 1 1
2 2 2
3 3 3
4 2 4
您可以删除'a'
列的副本(相当于您的时间列),然后转移另一列:
>>> df.drop_duplicates('a').sort_values(by='a').b.shift(-1)
0 2
2 3
3 NaN
Name: b, dtype: float64
这为您提供了之前b
值的a
值。