Datawhale开源内容:https://datawhalechina.github.io/joyful-pandas/build/html/%E7%9B%AE%E5%BD%95/ch4.html#id2
我只能说有这么好的教程,并且可以跟着大佬一起学习的感觉真的太好了!!!群里解答疑惑真的很棒!!!
【写在前面】:
本次的笔记排版我借鉴了一下优秀笔记的排版👍,显得更有层次更清晰了👏。但是我的内容还是没有像优秀笔记们把所有知识点都列出来(他们真的很棒🌹),对于我的第一遍学习来说,我希望自己的重心在知识上,把时间更多的花在让自己用眼、脑将每章节的知识反复过脑子,不断让其产生联系,发生化学作用上。如果之后学习到一定程度,能把这些知识都消化到自己的肚子里的时候,我应该会选择将知识点按照自己的理解整理一遍。向优秀的群友学习哈哈哈😊~
注:本文会将练一练与练习题的思考过程和解答都记录下来,部分习题还自己增加了一点练习。
【练一练-01】:
根据上下四分位数分割,将体重分位high、normal、low三组,统计身高的均值。 |
【我的解答】:
我最开始只想只用本章节的知识来解决这个问题,但是发现并不能解决。并且通过思维导图部分,我们可以知道分组条件可以是列名,也可以是逻辑判断。这里既然要分为三组,那么普通的bool只有True和False就不能用啦。就得思考下,怎么才能通过逻辑判断让分组条件返回三个值。
在上一章节中,我们学到了逻辑替换,包括where和mask。那么我们就可以使用条件来替换返回的值啦。将三个分组的条件写为condition,然后再值替换为对应的三分组,最后再对该分组进行求均值。
condition1 = df.Weight < df.Weight.quantile(0.25)
condition2 = (df.Weight.quantile(0.25) <= df.Weight) & (df.Weight <= df.Weight.quantile(0.75))
condition3 = df.Weight > df.Weight.quantile(0.75)
lnh = df.Weight.mask(condition1, 'Low').mask(condition2, 'Normal').mask(condition3, 'High')
df.groupby(lnh)['Weight'].mean()
【补充思考】:
我发现,这里其实还有一个问题,因为男女身高的高矮评判标准是不一样的,所以更合理的处理应该是在增加一个性别的行索引,让其作为外层的行索引。
【我的解答】:
我首先的处理办法是将列名“Gender”与刚才的条件lnh同时作为分组依据来做,但是发现报错了:TypeError: ‘Series’ objects are mutable, thus they cannot be hashed。所以注意⚠️:不能同时将列名与条件作为分组依据,但是其中任何一个都可以单独作为分组依据。
在群里问了大佬后,处理办法为,先将刚才生成的那一列加到数据上,然后再同时使用两个列名来进行分组即可。
df.insert(df.shape[1], 'Weight-Group', lnh)
df.groupby(['Gender', 'Weight-Group'])['Weight'].mean()
【练一练-02】:
上一小节介绍了可以通过drop_duplicates得到具体的组类别,现请用groups属性完成类似的功能。 |
【我的解答】:
drop_duplicates 作用回顾: