Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pandas中通过合并函数左连接_Python_Pandas_Left Join - Fatal编程技术网

Python 在Pandas中通过合并函数左连接

Python 在Pandas中通过合并函数左连接,python,pandas,left-join,Python,Pandas,Left Join,我有两张桌子要左连接 表A ID | Name | Birthday | Salary 1 | Tom | 01/12/80 | 29382 2 | Kate | 21/2/90 | 39383 3 | Ini | 23/8/92 | 28287 表B ID | Name | Birthday | Home 1 | Tom | 01/2/80 | Chur 2 | Kate | 21/2/90 | Blu 3 | Ini | 20/9/92 | La 我想做

我有两张桌子要左连接

表A

ID | Name | Birthday | Salary

1  |  Tom | 01/12/80 | 29382
2  | Kate | 21/2/90  | 39383
3  | Ini  | 23/8/92  | 28287
表B

ID | Name | Birthday | Home

1  |  Tom | 01/2/80  | Chur
2  | Kate | 21/2/90  | Blu
3  | Ini  | 20/9/92  | La
我想做一个左连接,结果如下

ID | Name | Birthday | Salary | Home

1  |  Tom | 01/12/80 | 29382  |  Chur
2  | Kate | 21/2/90  | 39383  |  Blu
3  | Ini  | 23/8/92  | 28287  |  La
我的代码是

join_table = tableA.merge(tableB['Home'], how = 'left', on =['ID'])
但结果是这样的

ID | Name | Birthday | Salary | Home

1  |  Tom | 01/12/80 | 29382  |  Chur
1  |  Tom | 01/2/80  | 29382  |  Chur
2  | Kate | 21/2/90  | 39383  |  Blu
3  | Ini  | 23/8/92  | 28287  |  La
3  | Ini  | 20/9/92  | 28287  |  La
ID 1和3是重复的,因为它们具有不同的生日数据,但在两个表中具有相同的ID。 有人能帮忙吗?谢谢

尝试使用:

join_table = tableA.merge(tableB['Home'], how = 'left', on =['ID']).drop_duplicates(subset=['Name'], keep='first')
尝试使用:

join_table = tableA.merge(tableB['Home'], how = 'left', on =['ID']).drop_duplicates(subset=['Name'], keep='first')

希望这有帮助:在tableB合并中包含“ID”和“Home”

join_table = tableA.merge(tableB[['ID','Home']], how = 'left', on =['ID'])
print(join_table)
输出:

   ID  Name  Birthday  Salary  Home
0   1   Tom  01/12/80   29382  Chur
1   2  Kate   21/2/90   39383   Blu
2   3   Ini   23/8/92   28287    La

希望这有帮助:在tableB合并中包含“ID”和“Home”

join_table = tableA.merge(tableB[['ID','Home']], how = 'left', on =['ID'])
print(join_table)
输出:

   ID  Name  Birthday  Salary  Home
0   1   Tom  01/12/80   29382  Chur
1   2  Kate   21/2/90   39383   Blu
2   3   Ini   23/8/92   28287    La

因为您不需要表B中的生日,所以不要使用它并根据名称或ID合并:


join_table=tableA.merge(tableB['Home','Name','ID'],how='left',on='ID')

因为您不需要表B中的生日,所以不要使用它并根据名称或ID进行合并:


join\u table=tableA.merge(tableB['Home','Name','ID'],how='left',on='ID')

您是否尝试过
join\u table=tableA.merge(tableB,how='left',on='ID'])
?它是否提供了预期的结果?您是否尝试了
join\u table=tableA.merge(tableB,how='left',on=['ID'])
?它是否提供了预期的结果?tableB中没有“ID”列,因为tableB['Home']仅用于合并()中,tableB中没有“ID”列,因为tableB['Home']仅用于合并()中这将仍然为您提供所有不在预期结果中的合并列这是次要更改这将仍然为您提供所有不在预期结果中的合并列这是次要更改代码运行时没有错误,但仍然是相同的结果(重复)。根据您的示例输入,我得到了不重复的输出。Try.drop_duplicates()代码运行时没有错误,但使用duplicate时仍然得到相同的结果。根据您的示例输入,我得到了没有重复项的输出。Try.drop_duplicates()如果表B的列数超过10列,我是否需要编写如下代码:join_table=tableA.merge(tableB['Home',…'Name','ID',how='left',on='ID')@我想是吧。或者换一种方式:删除您不需要的列。顺便说一句,一个好的工作习惯是只使用您需要的数据:)合并可能会有很高的成本。在两个数据帧(或多个数据帧)上进行数据选择,然后进行合并。如果表B有10个以上的列,我是否必须编写如下代码:join_table=tableA.merge(tableB['Home',…'Name','ID'],how='left',on='ID')??@mtpelerinI猜测。或者换一种方式:删除不需要的列。顺便说一句,一个好的工作习惯是只使用您需要的数据:)合并会有很高的成本。在两个(或多个数据帧)上进行数据选择,然后合并。