zoukankan      html  css  js  c++  java
  • pandas 分组操作

    任何分组(groupby)操作都涉及原始对象的以下操作之一。它们是

    • 分割对象
    • 应用一个函数
    • 结合的结果

    在许多情况下,将数据分成多个集合,并在每个子集上应用一些函数。在应用函数中,可以执行以下操作

    • 聚合 - 计算汇总统计
    • 转换 - 执行一些特定于组的操作
    • 过滤 - 在某些情况下丢弃数据

    下面来看看创建一个DataFrame对象并对其执行所有操作:

    import pandas as pd
    
    ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
             'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
             'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
             'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
             'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
    df = pd.DataFrame(ipl_data)

    将数据拆分成组

    Pandas对象可以分成任何对象。有多种方式来拆分对象,如

    • obj.groupby(‘key’)
    • obj.groupby([‘key1’,’key2’])
    • obj.groupby(key,axis=1)

    现在来看看如何将分组对象应用于DataFrame对象

    df.groupby('Year')

    查看分组

    df.groupby('Team').groups

    按多列分组

    df.groupby(['Team','Year']).groups

    选择一个分组

    使用get_group()方法,可以选择一个组。例如:

    grouped.get_group(2014)

    聚合

    聚合函数为每个组返回单个聚合值。当创建了分组(group by)对象,就可以对分组数据执行多个聚合操作。

    一个比较常用的是通过聚合或等效的agg方法聚合:

    grouped['Points'].agg(np.mean)

    另一种查看每个分组的大小的方法是应用size()函数:

    import numpy as np
    grouped.agg(np.size)

    一次应用多个聚合函数

    通过分组系列,还可以传递函数的列表或字典来进行聚合,并生成DataFrame作为输出

    agg = grouped['Points'].agg([np.sum, np.mean, np.std])

    转换

    分组或列上的转换返回索引大小与被分组的索引相同的对象。因此,转换应该返回与组块大小相同的结果。

    grouped = df.groupby('Team')
    score = lambda x: (x - x.mean()) / x.std()*10
    print (grouped.transform(score))

    过滤

    过滤根据定义的标准过滤数据并返回数据的子集。filter()函数用于过滤数据。

    filter = df.groupby('Team').filter(lambda x: len(x) >= 3)
  • 相关阅读:
    利用ansible一键部署nfs.yml格式剧本
    测试基础面试题 + SQL 面试题(选择题有部分答案,难度:低)
    Python Random模块
    SQL + Python 面试题:之二(难度:中等)
    接口测试面试题:之一(中英文题目、难度:简单)
    SQL面试题:之一(难度:中等)
    QA面试题:之一(中英文题目、难度:简单)
    通过 Python_Faker 生成测试数据
    Appium_Python_API_速查表
    Appium 命令使用说明
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12750373.html
Copyright © 2011-2022 走看看