从熊猫的上一行中找到一个值

时间:2019-03-23 22:18:59

标签: 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
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来移动值

2 个答案:

答案 0 :(得分:2)

您快到了,只是错过了.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

答案 1 :(得分:0)

一种有趣的方式,将idxmaxdrop结合使用,只需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