pandas 将条件应用于多个列的相似值以连接两个 Dataframe 表

wbrvyc0a  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(112)

我有以下两个不同大小的 Dataframe 。

df1: (with 40,000 data)
Date Latitude Longitude Car_Accident
2/10/22 43.69  -79.4     40
2/10/22 43.69  -79.4    34
2/20/22 43.68  -79.0     30
2/20/22 43.50  -79.1     35
............................
..............................

df2: (with 20,000 data)
Date Latitude Longitude Route
2/20/22 43.68  -79.0     111
2/20/22 43.50  -79.1    123
2/10/22 43.69  -79.4     124
2/10/22 43.69  -79.4     124
............................
.............................

我要合并它们,并对三个不同列应用条件
如果df1['Date']的值==df2['Date'] & df1[纬度]==df2[纬度] & df1[经度]==df2[经度]

然后,我们将添加具有满足此条件的数据的列

示例

final df:

Date   Latitude Longitude  Car_Accident  Route

2/20/22 43.50    -79.1            35      123
2/20/22 43.68    -79.0            30       111
2/10/22 43.69    -79.4            40       124
2/10/22 43.69    -79.4            34       124

我尝试的方法:

我尝试了内部连接以及索引。有时我有内存错误,有时它给空表或左表,如果我使用左连接。pandas.merge(df1, df2, on=[Date,Lat,Long]) or dataframe.merge任何东西都没有给出正确的答案。

我面临的问题:

在内部加入笛卡尔积是耗费巨大的计算过程,也是我不正确的方法。

eoxn13cs

eoxn13cs1#

在左合并之后使用pandas.DataFrame.drop_duplicates应该会给予您想要的结果:

final_df= (
            df1.merge(df2, on=["Date", "Latitude", "Longitude"], how="left")
               .drop_duplicates(ignore_index=True)
           )
#输出:
print(final_df)

      Date  Latitude  Longitude  Car_Accident  Route
0  2/10/22     43.69      -79.4            40    124
1  2/10/22     43.69      -79.4            34    124
2  2/20/22     43.68      -79.0            30    111
3  2/20/22     43.50      -79.1            35    123

相关问题