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),以使可读性变为“过去”。