pandas合并/连接实例:社交网站Meetup成员信息、某餐厅销售额
一张表(数据集DataFrame)中除了主键,和其他表建立联系后还会有外键,能够引用其他表中的内容。
社交网站Meetup成员信息:https://pan.baidu.com/s/1C_T9m7CVeXEdEADYbahMHg?pwd=1234

1. 数据集的导入

可见group1和group2其实是相同类型的数据集,可进行合并:pd.concat(objs = [列表]),按照传给objs参数的列表中的顺序进行连接(默认保留原始的索引)
也可以忽略旧的数字索引,采用新的数字索引:ignore_index = True
使用多级索引:保留原始的索引

16330 = 7999 + 8331

2. 缺失值
遇到新的列名会自动创建,缺失值设为NaN。遇到旧的列名则合并。
遇到新的行名会自动创建,缺失值设为NaN。但是遇到旧的行名也会自动创建。
也就是说,pd.concat(objs = [列表])是倾向于纵向连接表格的。如果要横向:

3. 左/内/外连接

左连接:旧数据不变,新数据输入作为补充,新数据没有的就是空
对groups数据集执行how = "left"的连接,依据on = "category_id",连接categories数据集
输出行16330,与groups相同:

内连接:新数据输入后,只保留和旧数据匹配的行
对groups数据集执行how = "in"的连接,依据on = "category_id",连接categories数据集
因为有的category_id没有category_name,name不再有NaN,而是直接删掉了,输出行只有8037:

外连接:新数据输入作为补充,新数据没有的就是空;如果新数据有、旧数据没有的,旧数据处是空
对groups数据集执行how = "outer"的连接,依据left_on = "city_id", right_on = "id"(因为两处on的名称不对应,因此手动匹配),连接cities数据集
输出行16334,比groups的16330多,可见最后的cities在groups中没能匹配上,旧数据处是空:

用_merge记录数据的左/右包含:indicator = True

输出right_only的那4行:
4. 索引标签的情况
如果依据的标签on = "city_id"是索引标签:

则将right_on = "id"修改为right_index = True:(left同理)