pandas学习 - Task05合并

1. 问题

【问题一】 请思考什么是append/assign/combine/update/concat/merge/join各自最适合使用的场景,并举出相应的例子。

append 与 assign相似, 每次都是在上一个dataframe的基础上增加新的行/列, 因此适合用在循环当中, 循环叠加赋值. 如在建模中需要保存每一次迭代的参数, 便可用append 来进行保存.
combine与 update都是用来进行填充/更新操作, 其中combine类似于两个表的索引取并集然后值取交集, 而update类似merge里面的左连接, 且无返回值(直接作用于左数据集上). 想到update的一个应用场景是在增量更新原数据中, 比如某些数据需要定期回滚5天, 这样用update就能比较迅速的修改最近 5天数据而不用担心误操作影响了其他数据.
merge用于不同数据框的合并, 这点与sql里面的join功能相同, 能实现数据框的 左连 右连 外连 内连. 需要注意的是merge 中的 key words 尽量避免多对多的情形.在日常数据处理中, merge用途最广, 比如一个项目把数据分拆成不同部分, 确定共同的key word,分别处理, 最终再把各个数据进行汇总.
join则是简化版的merge, 从功能上看, 与merge一致,都是横向合并不同的pandas对象, 但是join 里面, 右连表只能使用index, 而左链表可以使用自定义的key.
concat 一般用在拼接被拆分成多份的数据集, 比如csv有行数限制, 分成多个文件, 因此可以一次读入并 concat拼接, 相当于一个函数实现了 append 与 assign的功能

【问题二】 merge_ordered和merge_asof的作用是什么?和merge是什么关系?

merge_ordered 根据官方说明, 适用与带时间序列的数据, 自带ffill bfill 参数, 可以方便填充
merge_asof 模糊匹配版的merge

【问题三】 请构造一个多级索引与多级索引合并的例子,尝试使用不同的合并函数。
【问题四】 上文提到了连接的笛卡尔积,那么当连接方式变化时(inner/outer/left/right),这种笛卡尔积规则会相应变化吗?请构造相应例子。

对于笛卡尔积部分, left, inner, outer等价, 与right 不同, 区别在于排序上.对于前面三种, 相当于是先对 右链表进行排序, 再对左链表进行排序. 而right 则反之.

习题2:
第一题:
第一反应就是用merge来解决
pd.merge(emp[‘Name’], emp2[‘Name’], on = ‘Name’, how = ‘inner’)[‘Name’].unique()
第二问用merge + indicator
name_list = pd.merge(emp[‘Name’], emp2[‘Name’], on = ‘Name’, how = ‘outer’, indicator = ‘ind’)
name_list = name_list[name_list[‘ind’] != ‘both’]

得到了没有重复的name list 后
分别对两张表做 merge, how = inner , 然后再concat…有点笨

第二题:
学习答案中第一题的思路, 用isin解决
spec_list = [‘学科基础课’,‘专业必修课’,‘专业选修课’]
c1_spce = c1[c1[‘课程类别’].isin(spec_list)]
c1_non_spce = c1[~c1[‘课程类别’].isin(spec_list)]

hum…当然, 这里用merge+indicator也可以实现, 只是有点啰嗦
然后concat
第二种先concat再 筛选
最后一问复习了 transform 的用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值