之间有什么区别
pd.merge(staff_df,student_df,how =' left',left_index = True,right_index = True)
和
pd.merge(staff_df,student_df,how =' left',left_on =' Name',right_on =' Name')
答案 0 :(得分:3)
首先通过左连接按DataFrames
中的索引合并:
pd.merge(staff_df, student_df, how='left', left_index=True, right_index=True)
然后在Name
:
DataFrames
简化第三个左连接
pd.merge(staff_df, student_df, how='left', left_on='Name', right_on='Name')
pd.merge(staff_df, student_df, how='left', on='Name')
<强>样品强>:
staff_df = pd.DataFrame({'Name':list('abb'),
'B':[4,5,3],
'C':list('asd')}, index=list('ded'))
print (staff_df)
B C Name
d 4 a a
e 5 s b
d 3 d b
student_df = pd.DataFrame({'Name':list('abc'),
'A':[4,5,3],
'D':list('asd')}, index=list('dkl'))
print (student_df)
A D Name
d 4 a a
k 5 s b
l 3 d c
df = pd.merge(staff_df, student_df, how='left', left_index=True, right_index=True)
print (df)
B C Name_x A D Name_y
d 4 a a 4.0 a a
d 3 d b 4.0 a a
e 5 s b NaN NaN NaN
df = pd.merge(staff_df, student_df, how='left', on='Name')
print (df)
B C Name A D
0 4 a a 4 a
1 5 s b 5 s
2 3 d b 5 s
答案 1 :(得分:0)
如果 student_df 是
>>> student_df = pd.DataFrame({'name': ['x','y','z'], 'id': [1, 2, 3]})
>>> student_df
id name
0 1 x
1 2 y
2 3 z
staff_df 就像
>>> staff_df = pd.DataFrame({'name': ['a','b','z'], 'id': [34, 35, 36]})
>>> staff_df
id name
0 34 a
1 35 b
2 36 z
left_index = True,right_index = True 会将 student_df 的第0行与第0行 staff_df 合并。例如,这将是
的输出 id_x name_x id_y name_y
0 1 x 34 a
1 2 y 35 b
2 3 z 36 z
也可能是您正在使用left dataframe
的索引并重新启动到正确数据框的id
>>> pd.merge(student_df, staff_df, how='left',right_index=True,left_on='id')
id_x name_x id_y name_y
0 1 x 35.0 b
1 2 y 36.0 z
2 3 z NaN NaN
但是当您在左右两侧使用on
时,那些行的列值会匹配并合并在那些列上(与使用连接列类似)。