我有以下数据框
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来移动值
答案 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)
一种有趣的方式,将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