很多表中找出一个人:该人的家庭地址和工作地址在同一个地方。意思是找一个人,该人在不同表中的各自列是一样的,可以用到合并

 
 
#数据合并和分组
#1,  当数据结构某一个方向是相同的 np.concat  还要指定方向
# 2.多个只合并某几列

#1数据合并
#有相同的姓名

import pandas as pd
staff_df=pd.DataFrame([{'姓名':'张三','部门':'研发'},
                      {'姓名': '李四', '部门': '财务'},
                      {'姓名': '赵六', '部门': '市场'}])
student_df=pd.DataFrame([{'姓名':'张三','专业':'计算机'},
                      {'姓名': '李四', '专业': '会计'},
                      {'姓名': '王五', '专业': '市场营销'}])
print(staff_df)
print()
print(student_df)

print('将上面两个表按照姓名合并起来:\n',pd.merge(staff_df,student_df,how='outer',on='姓名'))  #'outer'取并集 inner 交集
print('将上面两个表按照姓名交集起来:\n',pd.merge(staff_df,student_df,how='inner',on='姓名'))  #'outer'取并集 inner 交集
print('将上面两个表按照姓名左链接起来:\n',pd.merge(staff_df,student_df,how='left',on='姓名'))  #left是左链接,即左边的保持完整,然后右边取出两者交际的部分  然后再相加
print('将上面两个表按照姓名右连接起来:\n',pd.merge(staff_df,student_df,how='right',on='姓名'))  #完整的右侧加上两者交集的部分


#按照索引进行合并
staff_df.set_index('姓名',inplace=True) #先设置索引
student_df.set_index('姓名',inplace=True)
print(staff_df)
print(student_df)
print('按照索引合并\n',pd.merge(staff_df,student_df,how='left',left_index=True,right_index=True))  #left_index=True,right_index=True 按照两边的索引进行合并

#假如在一个表中叫学生姓名  另一个表中叫员工姓名但是都是表示同一群人使用left_on 和right_on 选择列明
#先把所以重命名
#由于上面设置了索引 所以要重新设置一下
staff_df.reset_index(inplace=True)
student_df.reset_index(inplace=True)
staff_df.rename(columns={'姓名':'员工姓名'},inplace=True)
student_df.rename(columns={'姓名':'学生姓名'},inplace=True)
print('改变索引的:\n',staff_df)
print('改变索引的:\n',student_df)
print('不同索引名称的进行合并\n',pd.merge(staff_df,student_df,how='left',left_on='员工姓名',right_on='学生姓名'))

#如果两个数据中包含相同的列明(不要求合并),merge操作时,会自动加后缀作为区别
staff_df['地址']=['天津','北京','上海']
student_df['地址']=['天津','上海','广州']
print('添加一列:\n',staff_df)
print('添加一列:\n',student_df)
print('如果两个数据中包含相同的列明(不要求合并),merge操作时,会自动加后缀作为区别',pd.merge(staff_df,student_df,how='left',left_on='员工姓名',right_on='学生姓名'))
print('如果两个数据中包含相同的列明(不要求合并),merge操作时,会自动加后缀作为区别,也可以指定',pd.merge(staff_df,student_df,how='left',left_on='员工姓名',right_on='学生姓名',suffixes=('(公司)','(家乡)')))

#指定多列进行合并比如找出同一个人的工作地址和家乡地址相同的人。用inner
print('找出一个人:该人工作地址和家乡地址是一样的:\n',pd.merge(staff_df,student_df,left_on=['员工姓名','地址'],right_on=['学生姓名','地址']))
#    员工姓名  部门  地址 学生姓名   专业
# # 0   张三  研发  天津   张三  计算机



猜你喜欢

转载自blog.csdn.net/qq_37354021/article/details/80042948
今日推荐