量化金融分析AQF(4):Pandas 进阶(数据聚合Group、Concat,、Join、 Merge)

目录

一. Group操作:数据聚合

1.1 生成DataFrame

1.2 新增一例用于Group操作

1.3 生成DataFrameGroupBy对象

1.4 Group对象的聚合运算

1.5 选择Group对象中的数据

1.6 双重Group

二. Concat

三、Join

四、Merge


一. Group操作:数据聚合

1.1 生成DataFrame

import numpy as np
import pandas as pd

period = pd.date_range('2017-1-1', periods=10000, freq='D')    # 从20170101往后的10000天的day时间序列
df = pd.DataFrame(np.random.randn(10000, 4),
                  columns=['Data1', 'Data2', 'Data3', 'Data4'],
                  index = period)

 

1.2 新增一例用于Group操作

df['group1'] = np.random.choice(['A', 'B', 'C', 'D'], 10000)  

增加一列group1,1000行,等概率的随机从ABCD中选择一个。

 

1.3 生成DataFrameGroupBy对象

grouped = df.groupby('group1')     #df.groupby();必背;

grouped.size()           #每组元素数量

 

1.4 Group对象的聚合运算

grouped.sum()

grouped.max()

grouped.mean()     均值

grouped.describe()        #整体数据特征概览;

np.transpose(grouped.describe() )   # 转置

 

1.5 选择Group对象中的数据

grouped.get_group('A').head()

 

1.6 双重Group

df['group2'] = np.random.choice(['Python','C++','Java'], 10000)   

grouped = df.groupby(['group1', 'group2'])
grouped.size()                                    #多组分类

grouped.agg([np.max, np.sum])               #自定义聚合.分类汇总、查看,可以自定义聚合;

也可以:

grouped.agg({'Data1':np.mean, 'Data2':np.max})

 

二. Concat

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重合的部分
join_axes 传入需要保留的index
ignore_index 忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用
keys 可以给每个需要连接的df一个标签

 

三、Join

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

on 在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将右表的索引和左表的列对齐合并。

     栗子:

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

how  join中的how参数和merge中的how参数一样  可选:left(向左取交集)、right(向右取交集)、inner(取交集)、outer(取并集)

lsuffix  rsuffix   左右后缀参数:如果和表合并的过程中遇到有一列两个表都同名,但是值不同,合并的时候又都想保留下来,就可以用suffixes给每个表的重复列名增加后缀。

 

 

四、Merge

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

left:  拼接的左侧DataFrame对象
right:  拼接的右侧DataFrame对象
on:  在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将右表的索引和左表的列对齐合并。(和join的on一样)
left_on 和 right_on:  两张DataFrame列名是不同的,但是表示是同一个的意思且按left_on = right_on拼接; 一般2个参数同时使用。
left_index 和 right_index: 当2个dataframe的index一样。就可以通过left_index,right_index进行按index索引拼接
how: 可选:left(向左取交集)、right(向右取交集)、inner(取交集)、outer(取并集)
sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
suffixes: 用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
copy: 始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
indicator:将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值