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  # 解决负号显示为方块的问题

# 读取测试数据 
df = pd.read_excel("./无标题1.xlsx")
df.head()

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']

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
# 绘制每 年,月 数量
df1['m_id'].plot()
plt.title('完整时序指数数据每月数量')
plt.xlabel('year,month')
plt.ylabel('m_id count')
plt.grid()
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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()

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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值