Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 如何连接两个dataframe并在这样的特定列上对齐?_Python_Pandas - Fatal编程技术网

Python 如何连接两个dataframe并在这样的特定列上对齐?

Python 如何连接两个dataframe并在这样的特定列上对齐?,python,pandas,Python,Pandas,我想通过连接两个dataframe并在特定列上对齐来做一些工作,如下所示: dict3={'name': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'B', 6: 'B', 7: 'C', 8: 'C', 9: 'C'}, 'abstract_right': {0: 'A1', 1: 'A2', 2: nan, 3: 'B1', 4: 'B2', 5: 'B3', 6: nan, 7: 'C1', 8: 'C2', 9: 'C3'},

我想通过连接两个dataframe并在特定列上对齐来做一些工作,如下所示:

dict3={'name': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'B', 6: 'B', 7: 'C', 8: 'C', 9: 'C'}, 
       'abstract_right': {0: 'A1', 1: 'A2', 2: nan, 3: 'B1', 4: 'B2', 5: 'B3', 6: nan, 7: 'C1', 8: 'C2', 9: 'C3'}, 
       'abstract_left': {0: 'A1', 1: 'A2', 2: 'A3', 3: 'B1', 4: 'B2', 5: 'B3', 6: 'B4', 7: 'C1', 8: 'C2', 9: nan}}

combined=pd.DataFrame(dict3)
数据帧左像:

dict1={'abstract': {0: 'A1', 1: 'A2', 2: 'A3', 3: 'B1', 4: 'B2', 5: 'B3', 6: 'B4', 7: 'C1', 8: 'C2'}, 
       'name': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'B', 6: 'B', 7: 'C', 8: 'C'}}

left=pd.DataFrame(dict1)
数据帧右键类似:

dict2={'abstract': {0: 'A1', 1: 'A2', 2: 'B1', 3: 'B2', 4: 'B3', 5: 'C1', 6: 'C2', 7: 'C3'}, 
       'name': {0: 'A', 1: 'A', 2: 'B', 3: 'B', 4: 'B', 5: 'C', 6: 'C', 7: 'C'}}

right=pd.DataFrame(dict2)
我想得到一个这样的组合数据帧:

dict3={'name': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'B', 6: 'B', 7: 'C', 8: 'C', 9: 'C'}, 
       'abstract_right': {0: 'A1', 1: 'A2', 2: nan, 3: 'B1', 4: 'B2', 5: 'B3', 6: nan, 7: 'C1', 8: 'C2', 9: 'C3'}, 
       'abstract_left': {0: 'A1', 1: 'A2', 2: 'A3', 3: 'B1', 4: 'B2', 5: 'B3', 6: 'B4', 7: 'C1', 8: 'C2', 9: nan}}

combined=pd.DataFrame(dict3)

如何使用Pandas?

您可能对该功能感兴趣


您需要的不是连接,而是连接,因为它们必须由
名称
匹配。您可以创建一个
id
列来帮助合并和对齐行:

left['id'] = left.groupby('name').cumcount()
right['id'] = right.groupby('name').cumcount()
left.merge(right, on=['id', 'name'], how='outer', suffixes=['_left', '_right']).drop('id', axis=1)

您可以将值从何处与其他信息合并,并添加 左栏和右栏后面:

res = pd.merge(left, right, how='outer', indicator=True)
res['abstract_left'] = res.abstract[res._merge != 'right_only']
res['abstract_right'] = res.abstract[res._merge != 'left_only']
res.drop(['abstract', '_merge'], axis=1)

步调一致 进行外部联接:

res = pd.merge(left, right, how='outer', indicator=True)
结果是:

现在,根据
\u merged
中的值添加两列:

res['abstract_left'] = res.abstract[res._merge != 'right_only']
res['abstract_right'] = res.abstract[res._merge != 'left_only']

并删除不需要的列:

res.drop(['abstract', '_merge'], axis=1)

最后的结果。

非常感谢。我尝试了merge函数,但添加了“on='name'”并得到了一个24*4的数据帧。默认情况下,它位于两个数据帧中具有相同名称的所有列上。所以这里是
on=['name','abstract']
,因为两个数据帧都有这两列。非常感谢。我不知道来自其他信息的帮助。。。就像处理几何问题一样