美文网首页Pandas
10 pandas DataFrame - 表合并、堆叠、分组

10 pandas DataFrame - 表合并、堆叠、分组

作者: 白尔摩斯 | 来源:发表于2018-09-17 19:17 被阅读66次

    === 表合并 ===

    场景:两个dataFrame,一个是学生的[学号,姓名,班级] [学号,成绩] ,通过学号将两组信息合并到一起
    print('\n---- 学生信息 ---')
    students = pd.read_csv('stu_data.csv',encoding='gb2312')
    print(students)
    
    print('\n---- 学生成绩信息 ---')
    scores = pd.read_csv('score_data.csv',encoding='gb2312')
    print(scores)
    

    原数据:

    ---- 学生信息 ---
       学号    姓名 性别  年龄
    0   1   Tom  M  15
    1   2  Wang  F  17
    2   3   Qin  M  16
    
    ---- 学生成绩信息 ---
       学号  课程  分数
    0   1  语文  82
    1   1  数学  92
    2   1  英语  68
    3   2  语文  75
    4   2  数学  88
    5   2  英语  54
    6   3  语文  90
    7   3  数学  95
    8   3  英语  89
    

    合成两张表

    因为两张表里都有一个学号字段,所以会默认拿学号作合并

    pd.merge(students,scores)
    

    如果stu_data中的学号改为学号1,score_data中的学号改为学号2

    直接合并会报错,没有公共的列无法合并
    使用 left_on='学号1',right_on='学号2' 进行合并

    students = pd.read_csv('stu_data.csv',encoding='gb2312')
    scores = pd.read_csv('score_data.csv',encoding='gb2312')
    pd.merge(students,scores,left_on='学号1',right_on='学号2')
    

    合成一个索引

    print('\n---- 学生信息 ---')
    students=pd.read_csv('stu_data.csv',encoding='gb2312',index_col=0)
    print(students)
    
    print('\n---- 学生成绩信息 ---')
    scores=pd.read_csv('score_data.csv',encoding='gb2312',index_col=0)
    print(scores)
    

    将students和scores的索引都设置为学号 index_col=0
    merger的时候left_index=True,right_index=True 就可以找到连接的索引了

    stu_scores=pd.merge(students,scores,left_index=True,right_index=True)
    stu_scores
    

    如果学生没有考试,成绩为NaN,会连接不到,使用how='outer'即可列出这些数据
    how: outer并集,inner交集,left以左边为基础, right以右表为基础

    stu_scores=pd.merge(students,scores,left_index=True,right_index=True,how='outer')
    

    === 堆叠 ===

    场景:两组数据横向、纵向合并到一起
    df1 = pd.DataFrame({'key':['a','a','b','b'],'data1':range(4)})
    print(df1)
    df2 = pd.DataFrame({'key':['b','b','c','c'],'data2':range(4)})
    print(df2)
    
    print(pd.concat([df1,df2],axis=1))
    print(pd.concat([df1,df2],axis=0,join='outer'))
    
       data1 key
    0      0   a
    1      1   a
    2      2   b
    3      3   b
       data2 key
    0      0   b
    1      1   b
    2      2   c
    3      3   c
       data1 key  data2 key
    0      0   a      0   b
    1      1   a      1   b
    2      2   b      2   c
    3      3   b      3   c
       data1  data2 key
    0    0.0    NaN   a
    1    1.0    NaN   a
    2    2.0    NaN   b
    3    3.0    NaN   b
    0    NaN    0.0   b
    1    NaN    1.0   b
    2    NaN    2.0   c
    3    NaN    3.0   c
    

    === 分组 ===

    原数据:

    data = pd.DataFrame({
            'data1':np.random.randint(1,9,5),
            'data2':np.random.randint(1,9,5),
            'key1':list('aabba'),
            'key2':['one','one','two','one','two']
        })
    data
    

    1、对列进行分组 groupby

    datas = data.groupby('key1')
    datas
    

    获得了一个对象
    <pandas.core.groupby.DataFrameGroupBy object at 0x0000021BF73012E8>

    2、查看分组对象

    分成了两个个元组,将相同key1的一组分到一起

    for i in datas:
        print(i)
    
    ('a',    data1  data2 key1 key2
     0       7       4     a   one
     1       3       5     a   one
     4       5       4     a   two)
    ('b',    data1  data2 key1 key2
     2       4       5     b   two
     3       3       3     b   one)
    

    3、通过key1进行分组,分别进行聚合操作

    datas.mean()
    datas.sum()
    datas.min()
    datas.max()
    

    相关文章

      网友评论

        本文标题:10 pandas DataFrame - 表合并、堆叠、分组

        本文链接:https://www.haomeiwen.com/subject/zbqdnftx.html