Python 从中的上一行查找值

Python 从中的上一行查找值,python,pandas,Python,Pandas,我有以下数据帧 Date UUID Value RANK 01/03/2019 A 0 2 28/02/2019 A 1 1 28/02/2019 B 2 2 26/02/2019 B 3 1

我有以下数据帧

Date             UUID         Value         RANK
01/03/2019        A            0              2
28/02/2019        A            1              1
28/02/2019        B            2              2 
26/02/2019        B            3              1
24/02/2019        C            4              2
21/02/2019        C            1              1
我想得到以下信息:

Date             UUID         Value         RANK     PreValue
01/03/2019        A            0              2       1
28/02/2019        A            1              1       N/A
28/02/2019        B            2              2       3
26/02/2019        B            3              1       N/A
24/02/2019        C            4              2       1
21/02/2019        C            1              1       N/A
我将如何获得上一个值

任何帮助都将不胜感激


编辑:所以实际上我想做的是根据排名和uuid移动值

你几乎就在那里了,只是错过了
。groupby

df['PrevValue'] = df.sort_values(['UUID', 'RANK']).groupby('UUID').Value.shift(1)

print(df)
         Date UUID  Value  RANK  PrevValue
0  01/03/2019    A      0     2        1.0
1  28/02/2019    A      1     1        NaN
2  28/02/2019    B      2     2        3.0
3  26/02/2019    B      3     1        NaN
4  24/02/2019    C      4     2        1.0
5  21/02/2019    C      1     1        NaN

一种有趣的方法,使用
idxmax
drop
,只需
shift
整个值和条件赋值

df.loc[df.index.drop(df.groupby('UUID').RANK.idxmin()),'New']=df.Value.shift(-1)
df
         Date UUID  Value  RANK  New
0  01/03/2019    A      0     2  1.0
1  28/02/2019    A      1     1  NaN
2  28/02/2019    B      2     2  3.0
3  26/02/2019    B      3     1  NaN
4  24/02/2019    C      4     2  1.0
5  21/02/2019    C      1     1  NaN

如果你在改变排名,为什么我在PreValue中看到3?排名列中没有3。@coldspeed的移位
道歉删除了问题的这一部分,因为我意识到这会引起问题。我已经按秩对数据帧进行了排序,需要从上一个秩中获取值。关于你的问题,对于B,其中秩=1,值是3,所以前面的值是3,其中秩=2,对于BY,你需要添加更多的列。时间将从左向右(旧-->新)。完成后,您可能希望将列顺序切换为get(new-->old),以使可读性变为“过去”。