Python DataFrame:在其他列中具有相同值的特定值之前找到上一行的值

Pri*_*cis 3 python dataframe python-3.x pandas

我有如下数据资料

import pandas as pd
d = {
    'Name' : ['James', 'John', 'Peter', 'Thomas', 'Jacob', 'Andrew','John', 'Peter', 'Thomas', 'Jacob', 'Peter', 'Thomas'],
    'Order' : [1,1,1,1,1,1,2,2,2,2,3,3],
    'Place' : ['Paris', 'London', 'Rome','Paris', 'Venice', 'Rome', 'Paris', 'Paris', 'London', 'Paris', 'Milan', 'Milan']
}

df = pd.DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
      Name  Order   Place
0    James      1   Paris
1     John      1  London
2    Peter      1    Rome
3   Thomas      1   Paris
4    Jacob      1  Venice
5   Andrew      1    Rome
6     John      2   Paris
7    Peter      2   Paris
8   Thomas      2  London
9    Jacob      2   Paris
10   Peter      3   Milan
11  Thomas      3   Milan
[Finished in 0.7s]
Run Code Online (Sandbox Code Playgroud)

数据框代表访问各个城市的人,Order列定义访问顺序。

我想知道以前去过哪个城市的人Paris。预期的数据帧如下

     Name  Order   Place

1     John      1  London
2    Peter      1    Rome
4    Jacob      1  Venice
Run Code Online (Sandbox Code Playgroud)

找到它的pythonic方法是什么?

raf*_*elc 5

使用 merge

s = df.loc[df.Place.eq('Paris'), ['Name', 'Order']]
m = s.assign(Order=s.Order.sub(1))
Run Code Online (Sandbox Code Playgroud)

m.merge(df, on=['Name', 'Order'])
Run Code Online (Sandbox Code Playgroud)
    Name  Order   Place
0   John      1  London
1  Peter      1    Rome
2  Jacob      1  Venice
Run Code Online (Sandbox Code Playgroud)