我一直试图绕过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')
每个产生略微不同的输出。有人可以指导我正确理解每个输出的构造方式吗?
具体地,
我不想询问在同一合并声明中使用left_index
和right_on
。
感谢。
答案 0 :(得分:1)
我建议您阅读文档以正确理解合并操作。通过示例对其进行了详细记录。安理会没有想到更简单的解释。 Documentation for merging
来自文档
left_on :左侧DataFrame中的列用作键。可以是 列名或数组的长度等于 数据帧
right_on :右侧DataFrame中的列用作键。可以 是长度等于长度的列名或数组 数据帧
为什么角色和学校专栏始终位于location_y?
之间合并后的列将被排序。要检查是否在L
的第二个df
参数中更改了以pd.merge
之前的字母开头的列名称。
pd.merge(student_df, staff_df, how='left', left_on='Name', right_on='Name')
Location_x Name School Location_y Role 0 1024 Billiard Avenue James Business Washington Avenue Grader 1 Fraternity House #22 Mike Law NaN NaN 2 512 Wilson Crescent Sally Engineering Washington Avenue Course liasion
Role
为Bole
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
您可以使用left_on
而不是right_on
和on
两个参数来匹配数据框中的键。即
pd.merge(student_df, staff_df, how='left', on='Name')
名称列旁边的角色列是什么时候?名称列旁边的学校列是什么时候?
这取决于你给出的df的优先级。如果您先指定staff_df
,那么列将在staff_df
后逐列连接。因此Role
位于Name
列旁边。相似如果您指定student_df
学生将在名称列旁边。