Pandas有条件地从前一行获得结果而没有移位(多行具有相同的值)

时间:2016-03-16 16:12:35

标签: pandas time-series

我在时间序列中有多个具有相同值的行,并希望在时间序列中返回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

1 个答案:

答案 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值。