• 速战速决 Python python 第三方库(pandas): DataFrame筛选和分组


    速战速决 Python https://github.com/webabcd/PythonSample
    作者 webabcd

    速战速决 Python - python 第三方库(pandas): DataFrame筛选和分组

    示例如下:

    thirdLib/pandas/sample4.py

    # pandas
    #   DataFrame 筛选和分组
    
    import pandas as pd
    
    data = {
        "age": [40, 25, 22, 28, 28],
        "gender": ['M', 'F', 'M', 'M', 'F'],
        "city": ['beijing', 'beijing', 'shanghai', 'beijing', 'shanghai']
    }
    index = pd.Index(['zhao', 'qian', 'sun', 'li', 'zhou'])
    a = pd.DataFrame(data=data, index=index)
    print(a)
    '''
          age gender      city
    zhao   40      M   beijing
    qian   25      F   beijing
    sun    22      M  shanghai
    li     28      M   beijing
    zhou   28      F  shanghai
    '''
    
    
    # 按照索引正序排序
    print(a.sort_index())
    # 按照索引倒序排序
    print(a.sort_index(ascending=False))
    # 按照指定字段和指定顺序排序
    print(a.sort_values(by="age", ascending=False))
    # 先按 city 排序,再按 age 排序
    print(a.sort_values(by=["city", "age"]))
    
    
    # 取前 n 条数据
    print(a.head(2))
    # 取后 n 条数据
    print(a.tail(2))
    # 获取 age 字段最大的前 2 条数据
    print(a.nlargest(2, 'age'))
    # 获取 age 字段最小的前 2 条数据
    print(a.nsmallest(2, 'age'))
    
    
    # 取索引 zhao 和 sun 的数据
    print(a.loc[['zhao', 'sun']]) 
    # 取索引 zhao 到 sun 之间的数据
    print(a.loc['zhao':'sun']) 
    # 取 age 列和 city 列的全部数据
    print(a.loc[:, ["age", "city"]])
    # 取索引 zhao 和 sun 的 age 列到 city 列之间的数据
    print(a.loc[['zhao', 'sun'], "age":"city"])
    # 取位置 0 和 3 的数据
    print(a.iloc[[0,3]])
    # 取位置 0 到 2 的数据
    print(a.iloc[0:3]) 
    # 取第 1 行到第 3 行,第 1 列到第 2 列的数据
    print(a.iloc[0:3, 0:2])
    '''
          age gender
    zhao   40      M
    qian   25      F
    sun    22      M
    '''
    
    
    # 取 age 大于 30 且 gender 是 M 的数据
    #   & 和
    #   | 或
    #   ~ 非
    print(a[(a.age>30) & (a.gender=='M')])
    # 取 age 大于 30 的只包含 age 列的数据
    print(a.loc[a.age>30, ["age"]])
    # 取 city 为 beijing 或 shanghai 的数据
    print(a[a.city.isin(["beijing", "shanghai"])])
    # 取索引为 zhao 的数据
    print(a[a.index.isin(["zhao"])])
    
    
    
    # 以下用于演示如何对数组做分组
    # 依据 gender 分组
    b = a.groupby("gender")
    # 依据 gender 和 city 的联合值分组
    c = a.groupby(["gender", "city"])
    
    # 获取全部分组数据
    print(b.groups) # {'F': ['qian', 'zhou'], 'M': ['zhao', 'sun', 'li']}
    print(c.groups) # {('F', 'beijing'): ['qian'], ('F', 'shanghai'): ['zhou'], ('M', 'beijing'): ['zhao', 'li'], ('M', 'shanghai'): ['sun']}
    
    # 遍历分组
    for name, group in b: 
        print(name)
        print(group) 
    '''
    F
          age gender      city
    qian   25      F   beijing
    zhou   28      F  shanghai
    M
          age gender      city
    zhao   40      M   beijing
    sun    22      M  shanghai
    li     28      M   beijing
    '''
    
    # 分组统计(更多功能需要借助 numpy 库,比如统计平均值可以用 numpy.mean)
    # 统计不同 gender 分组的相同年龄的数量
    print(b["age"].agg(len))
    '''
    gender
    F    2
    M    3
    '''
    # 统计不同 gender 分组的最大年龄
    print(b["age"].agg(max))
    '''
    gender
    F    28
    M    40
    '''
    
    # 统计不同 gender 分组的年龄的累加值和最大值(可以指定统计后的列名)
    print(b["age"].agg([sum, max]).rename(columns={"sum":"mySum", "max":"myMax"}))
    '''
            mySum  myMax
    gender
    F          53     28
    M          90     40
    '''
    
    # 支持同时对分组数据的不同字段做统计(可以指定统计后的列名)
    print(b.agg({"age":sum}).rename(columns={"age": "myAge"}))
    '''
            myAge
    gender
    F          53
    M          90
    '''
    

    速战速决 Python https://github.com/webabcd/PythonSample
    作者 webabcd

  • 相关阅读:
    slqite3练习
    QStackedWidget 与 QStackedLayout 的用法区别
    pyqt5 菜单,工具栏,线程,matplotlib
    PyQt5 结合 matplotlib 时,如何显示其 NavigationToolbar
    tkinter事件高级用法实例
    tkinter菜单图标,工具栏
    tkinter界面卡死的解决办法
    8个经过证实的方法:提高机器学习模型的准确率
    结合Scikit-learn介绍几种常用的特征选择方法
    scikit-learn的主要模块和基本使用
  • 原文地址:https://www.cnblogs.com/webabcd/p/python_thirdLib_pandas_sample4.html
Copyright © 2020-2023  润新知