Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python DataFrame : find previous row's value before a specific value with same value in other columns

I have a datafame as follows

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)

      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]

The dataframe represents people visiting various cities, Order column defines the order of visit.

I would like find which city people visited before Paris. Expected dataframe is as follows

     Name  Order   Place

1     John      1  London
2    Peter      1    Rome
4    Jacob      1  Venice

Which is the pythonic way to find it ?

like image 853
Prince Francis Avatar asked Jun 17 '26 10:06

Prince Francis


1 Answers

Using merge

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

m.merge(df, on=['Name', 'Order'])

    Name  Order   Place
0   John      1  London
1  Peter      1    Rome
2  Jacob      1  Venice
like image 96
rafaelc Avatar answered Jun 19 '26 01:06

rafaelc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!