动手学数据分析 Task3

动手学数据分析 Task3

一、concat、merge、join

concat方法可以在两个维度上拼接,默认纵向凭借(axis=0),拼接方式默认外连接

pd.concat(objs, axis=0, join='outer', 
         join_axes=None, ignore_index=False, 
         keys=None, levels=None, names=None, 
         verify_integrity=False, copy=True)
###
objs 需要连接的对象,eg [df1, df2]
axis axis = 0, 表示在水平方向(row)进行连接 axis = 1, 表示在垂直方向(column)进行连接
join outer, 表示index全部需要; inner,表示只取index重合的部分。**注意concat没有左连接或右连接。**
join_axes 传入需要保留的index
ignore_index 忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用
keys 可以给每个需要连接的df一个label
###

merge函数的作用是将两个pandas对象横向合并,遇到重复的索引项时会使用笛卡尔积,默认inner连接,可选left、outer、right连接。

pandas.merge(left, right, 
             how='inner', on=None, 
             left_on=None, right_on=None, 
             left_index=False, right_index=False, 
             sort=False, suffixes=('_x', '_y'), 
             copy=True, indicator=False, 
             validate=None)
###
left : DataFrame
right : DataFrame or named Series
how : {‘left’, ‘right’, ‘outer’, ‘inner’}, default ‘inner’(设置数据连接的集合操作规则)
      left: 返回的结果只包含左列
      right: 返回的结果只包含右列
      inner: 交集
      outer: 并集
on :label or list(此参数只有在两个DataFrame有共同列名的时候才可以使用)
left_on与right_on: label or list, or array-like(合并两个列名不同的数据集)
left_index与right_index : bool, default False(合并索引)
suffixes : tuple of (str, str), default ('_x', '_y')(为重复列名自定义后缀)
###

join函数作用是将多个pandas对象横向拼接,遇到重复的索引项时会使用笛卡尔积,默认左连接,可选inner、outer、right连接.它的效果与merge类似,但对于many_to_one模式下的合并,往往join更为方便。例:

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                     'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],
                      'D': ['D0', 'D1']},
                     index=['K0', 'K1'])
left.join(right, on='key')
####
result:
	A	B	key	C	D
0	A0	B0	K0	C0	D0
1	A1	B1	K1	C1	D1
2	A2	B2	K0	C0	D0
3	A3	B3	K1	C1	D1
###

题目中任务4和任务5(拼接text_left_up和text_left_down,text_right_up和text_right_down)都要用到纵向拼接,因此只用merge和join不能完成目标,还需要配合pd.concat或者append。

二、groupby

首先按年龄对数据进行分类,然后统计不同年龄段的存活率。(改编自任务7)
注意bins的分类为左开右闭,比如年龄为5的小朋友将被分到0~5的组。因此,对于以下分组方法,如果有年龄为0的小朋友,则他将不会被分到任何组,显示为nan。


bins=[0,5,15,30,50,train['Age'].max()]
train['Age_group']=pd.cut(train['Age'],bins=bins,labels=['0~5','5~15','15~30','30~50','50~80'])
print(train['Survived'].groupby(train['Age_group']).sum()/train['Survived'].groupby(train['Age_group']).count())

####
result:
Age_group
0~5      0.697674
5~15     0.461538
15~30    0.358896
30~50    0.423237
50~80    0.343750
Name: Survived, dtype: float64
####

从以上结果可以看出,随着年龄的增大,存活率基本呈现下降的趋势。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值