Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x 如何正确理解熊猫数据帧合并(如何,左开,右开)?_Python 3.x_Pandas_Dataframe_Merge - Fatal编程技术网

Python 3.x 如何正确理解熊猫数据帧合并(如何,左开,右开)?

Python 3.x 如何正确理解熊猫数据帧合并(如何,左开,右开)?,python-3.x,pandas,dataframe,merge,Python 3.x,Pandas,Dataframe,Merge,一段时间以来,我一直在尝试将我的头绕在merge上: 我有以下数据帧: staff_df = pd.DataFrame([{'Name': 'Kelly', 'Role': 'Director of HR', 'Location': 'State Street'}, {'Name': 'Sally', 'Role': 'Course liasion', 'Location': 'Washington Avenue'},

一段时间以来,我一直在尝试将我的头绕在
merge
上:

我有以下数据帧:

staff_df = pd.DataFrame([{'Name': 'Kelly', 'Role': 'Director of HR', 'Location': 'State Street'},
                         {'Name': 'Sally', 'Role': 'Course liasion', 'Location': 'Washington Avenue'},
                         {'Name': 'James', 'Role': 'Grader', 'Location': 'Washington Avenue'}])
student_df = pd.DataFrame([{'Name': 'James', 'School': 'Business', 'Location': '1024 Billiard Avenue'},
                           {'Name': 'Mike', 'School': 'Law', 'Location': 'Fraternity House #22'},
                           {'Name': 'Sally', 'School': 'Engineering', 'Location': '512 Wilson Crescent'}])
我知道我可以用多种方式合并它们:

pd.merge(staff_df, student_df, how='left', left_on='Name', right_on='Name')
pd.merge(student_df, staff_df, how='left', left_on='Name', right_on='Name')
pd.merge(staff_df, student_df, how='right', left_on='Name', right_on='Name')
pd.merge(student_df, staff_df, how='right', left_on='Name', right_on='Name')
每种方法产生的输出略有不同。有人能指导我如何正确理解每个输出是如何构造的吗

具体来说,

  • 为什么角色栏和学校栏总是在同一地点之间
  • 姓名栏旁边的角色栏是什么时候?学校是什么时候 “名称”列旁边的列
我会推迟询问在同一个merge语句中使用
left\u index
right\u on


谢谢。

我建议您仔细阅读文档,以正确理解合并操作。它有很好的例子记录。想不出更简单的解释了

从文件

左上:左数据框中的列用作键。可以是 列名或数组,其长度等于 数据帧

右键打开:右数据框中的列用作键。可以 列名或数组的长度等于 数据帧

为什么角色栏和学校栏总是在位置之间?

合并后,将对列进行排序。要检查是否更改
pd.merge
第二个
df
参数中以
L
之前的字母开头的列名

pd.merge(student_df, staff_df, how='left', left_on='Name', right_on='Name')
您可以使用上的与上的两个参数来代替上的左键与右键,这两个参数将匹配来自两个数据帧的键。i、 e

 pd.merge(student_df, staff_df, how='left', on='Name') 
角色栏何时位于姓名栏旁边,学校栏何时位于姓名栏旁边?


这取决于您给予df的优先级。如果首先指定
staff\u df
,则列将在
staff\u df
之后按列连接。因此,
Role
将位于
Name
列旁边。同样,如果您指定
student\u df
student将位于名称列旁边

你读了吗?@Zero谢谢你的参考文件。我浏览了一遍,没有找到合适的例子来帮助我回答问题。如果您能就如何回答我的问题给我一些指导,我将不胜感激。谢谢 Location_x Name School Bole Location_y 0 1024 Billiard Avenue James Business Grader Washington Avenue 1 Fraternity House #22 Mike Law NaN NaN 2 512 Wilson Crescent Sally Engineering Course liasion Washington Avenue
 pd.merge(student_df, staff_df, how='left', on='Name')