合并大熊猫

时间:2018-03-04 19:33:43

标签: python pandas dataframe merge

之间有什么区别

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')

2 个答案:

答案 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时,那些行的列值会匹配并合并在那些列上(与使用连接列类似)。