Reputation: 37
I have two pandas dataframe, name df1
, and df2
. df1
looks like below:
df1=
tagx tagy datetime
302. 303. 2020-07-01 12:22:31
402. 811. 2020-07-01 12:20:33
.
.
.
.
and df2
is like below:
df2=
Latitude. Longitude. datetime tag
5.01. 52.0988. 2020-07-01 12:22:31 302
5.01. 52.0233. 2020-07-01 12:22:31 303
5.02. 52.0888. 2020-07-01 12:20:33 402
5.02. 52.0122. 2020-07-01 12:20:33 811
.
.
.
I want to look into the df1
and find the value of df1['tagx', 'datetime']
, in df2
as df2['tag', 'datetime']
, then if I could find, take the Latitude and Longitude to the df1
and add as LatitudeX
and LongitudeX
on df1[tagx, datetime]
rows.(Then repeat the same for tagY
)
This is what I like to have:
df1=
tagx tagy datetime LatitudeX LongitudeX LatitudeY LongitudeY
302. 303. 2020-07-01 12:22:31. 5.01. 52.0988. 5.01. 52.0233.
402. 811. 2020-07-01 12:20:33. 5.02. 52.0888. 5.02. 52.0122.
.
.
.
Note that in df2
, datetime cannot be indexed as it doesn't have unique values.
Upvotes: 0
Views: 48
Reputation: 5037
Here you go:
left = pd.merge(df1, df2, left_on=['tagx', 'datetime'], right_on=['tag', 'datetime'])\
.rename(columns={'Latitude.': 'LatitudeX', 'Longitude.': 'LongitudeX'})\
.drop(columns='tag')
right = pd.merge(df1, df2, left_on=['tagy', 'datetime'], right_on=['tag', 'datetime'])\
.rename(columns={'Latitude.': 'LatitudeY', 'Longitude.': 'LongitudeY'})\
.drop(columns='tag')
print(pd.merge(left, right, on=['tagx', 'tagy', 'datetime']))
Output
tagx tagy datetime LatitudeX LongitudeX LatitudeY LongitudeY
0 302.0 303.0 2020-07-01 12:22:31 5.01. 52.0988. 5.01. 52.0233.
1 402.0 811.0 2020-07-01 12:20:33 5.02. 52.0888. 5.02. 52.0122.
Upvotes: 1