• TOOLS_Pandas根据日期列进行分组统计及绘图的使用示例


    Pandas根据日期列进行分组统计及绘图的使用示例

    导入所需要的库

    # coding=utf-8
    from logging import warning
    import os, sys
    import datetime
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    
    # 处理plt中文显示问题
    plt.rcParams["font.sans-serif"] = ["SimHei"]  # 正常显示中文标签
    plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示为方块的问题
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    # 读取测试数据 
    df = pd.read_excel("./无标题1.xlsx")
    df.head()
    
    
    • 1
    • 2
    • 3
    • 4
    m_idmax_ivrecord_idrecord_namerecord_sub_namepub_timelanguageversioncreate_timecount_singer
    0000DmZbU1RUrem49359118379野摩托NaN2021-04-151.0NaN2022-09-28 22:27:541
    1000SOicI1YXaDP6035981658不可以这样(反英雄)NaN2021-04-151.0NaN2022-09-29 05:29:021
    2000ibM5x4Jx2f49782425705心存侥幸NaN2021-04-151.0NaN2022-09-29 01:00:031
    3004OL7tM1gklPK12212310361如果在一起NaN2021-04-151.0NaN2022-09-29 00:03:171
    4004D5jPe0h8Q6C12194413841钗头凤.十年生死两茫茫NaN2021-04-151.0NaN2022-09-29 00:54:411

    日期列非index的处理方式

    对日期列series进行apply变换处理,得到用于分组的key:

    • 对 pub_time 列进行 year和month的key提取;
    • 然后将其送入 数据框 的groupby;
    • 然后对分组内容进行 相应统计值的方法调用;
    # 日期非index的处理方式
    
    key_year = lambda x:x.year
    key_month = lambda x:x.month
    
    # 按年
    # df1 =  df.groupby(df['pub_time'].apply(key_year)).count()
    
    # 按月
    # df1 = df.groupby(df['pub_time'].apply(key_month)).count()
    
    # 按年月
    df1 = df.groupby([df['pub_time'].apply(key_year),df['pub_time'].apply(key_month)]).count() # 还可以取first() 及其他统计值
    
    df1['m_id']
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    pub_time  pub_time
    2021      4            567
              5           1026
              6           1163
              7           1337
              8           1386
              9           1465
              10          1498
              11          1478
              12          1482
    2022      1           1205
              2            761
              3           1224
              4           1410
              5           1324
              6           1347
              7            966
              8            965
              9            909
              10           639
              11           145
    Name: m_id, dtype: int64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    # 绘制每 年,月 数量
    df1['m_id'].plot()
    plt.title('完整时序指数数据每月数量')
    plt.xlabel('year,month')
    plt.ylabel('m_id count')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4JLTHrIi-1668063889609)(output_6_0.png)]

    在这里插入图片描述

    日期作为index的处理方式

    # 日期作为index的处理方式
    df.index = pd.to_datetime(df.pub_time)
    
    # df.shape # shape size
    # df = df[ df['pub_time'] > '2019-01-01'] # 条件过滤
    # df = df[df["count_singer"] == 1] # 条件过滤
    # df.drop_duplicates(subset=['record_name'],keep='first',inplace=True) # 去重
    
    
    df2 = df.groupby([df.index.year, df.index.month]).count()
    df2['m_id']
    
    # ym_max = df.groupby([df.index.year, df.index.month]).apply(lambda t: t[t.max_iv==t.max_iv.max()])
    # print('ym_max:',ym_max)
     
    # ym_min = df.groupby([df.index.year, df.index.month]).apply(lambda t: t[t.max_iv==t.max_iv.min()])
    # print('ym_min:',ym_min)
     
    ym_agg = df.groupby([df.index.year, df.index.month]).agg({'max_iv':['max','mean','min','count']})
    ym_agg
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    max_iv
    maxmeanmincount
    pub_timepub_time
    20214421189066834.2098776027567
    5541295677094.11793460051026
    6274486372879.79363760001163
    7595171778934.39192260031337
    8358016257704.01370960081386
    9455031959929.76723560081465
    10377105553772.27837160081498
    11624210472782.08525060011478
    12636264684906.52969060081482
    20221202053461655.12448160071205
    2932501575054.3285156016761
    3180821558802.95179760001224
    41093250081737.10283760091410
    5469069074068.34290060041324
    6458175063106.03489260031347
    715988460100434.1863356017966
    8107315642211451.4528506001965
    9412523690661.9009906007909
    10145097680869.0203446007639
    112586974133693.7034486056145
    ym_agg.plot()
    plt.xlabel('year,month')
    plt.ylabel('max_iv analysis')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9GFZFVGr-1668063889611)(output_9_0.png)]

    在这里插入图片描述

    ym_agg.max_iv['mean'].plot()
    plt.xlabel('year,month')
    plt.ylabel('max_iv mean')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMWDeO8s-1668063889611)(output_10_0.png)]

    在这里插入图片描述

    ym_agg.max_iv['max'].plot()
    plt.xlabel('year,month')
    plt.ylabel('max_iv max')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0cPUHXLn-1668063889612)(output_11_0.png)]

    在这里插入图片描述

    ym_agg.max_iv['min'].plot()
    plt.xlabel('year,month')
    plt.ylabel('max_iv min')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0D9D7Il7-1668063889612)(output_12_0.png)]

    在这里插入图片描述

    ym_agg.max_iv['count'].plot()
    plt.xlabel('year,month')
    plt.ylabel('max_iv count')
    plt.grid()
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fi2rCmfL-1668063889613)(output_13_0.png)]

    在这里插入图片描述

  • 相关阅读:
    选择实验室超声波清洗机具有哪些作用?
    Spring Aop 源码 (三) (执行过程)
    大疆笔试题
    js的常用的设计模式例子
    在Linux/Ubuntu/Debian中使用7z压缩和解压文件
    Kotlin的关键字 lateinit 和 lazy
    RRU-Net:The Ringed Residual U-Net for Image Splicing Forgery Detection阅读笔记一
    使用dnSpy对无源码EXE或DLL进行反编译并且修改
    linux--发展史与环境
    Mybatsi-动态SQL
  • 原文地址:https://blog.csdn.net/baby_hua/article/details/127789265