python学习1补充

大家好,这里是七七,这个专栏是用代码实例来学习的,不是去介绍很多知识的。

话不多说,开始今天的内容

目录

代码1

代码2

代码3 

 代码4

代码5

学习1的总代码


代码1

grouped=df.groupby('单品编码')
result={}

grouped=df.groupby('单品编码')是对名为df的数据框按照列名为’单品编码’进行分组操作。这将返回一个GroupBy对象,该对象可以用于按照分组对数据进行聚合操作。

然后,result={}是创建一个空字典对象。

代码2

for name, group in groupedunique_months=group['月份'].unique()total_months=len(unique_months)season=[]season_list=[0]*4if 3 in unique_months or 4 in unique_months or 5 in unique_months:season.append("春季")season_list[0]=1if 6 in unique_months or 7 in unique_months or 8 in unique_months:season.append("夏季")season_list[1] = 1if 9 in unique_months or 10 in unique_months or 11 in unique_months:season.append("秋季")season_list[2] = 1if 12 in unique_months or 1 in unique_months or 2 in unique_months:season.append("冬季")season_list[3] = 1result[name]={'出现的月份':unique_months,'总共出现的月份数':total_months,'出现的季节':season,"季节数":len(season),"季节列表":season_list}

这段代码是对`GroupBy`对象进行迭代,并针对每个分组进行操作,最终生成一个结果字典`result`,记录了每个分组的统计信息。

对于每个分组,首先通过`group['月份'].unique()`获取该分组下的"月份"列中的唯一值,并将其存储在`unique_months`中。接着,使用`len()`函数计算`unique_months`的长度,即该分组出现的不同月份总数,并将其存储在`total_months`中。

为了确定该分组出现的季节信息,定义了一个空的列表`season`和一个包含4个零元素的列表`season_list`。然后,通过判断`unique_months`中是否包含特定月份,来确定季节的出现情况。如果`unique_months`中出现了3、4或5月份,则将"春季"添加到`season`列表中,并将`season_list[0]`置为1。同样,对其他月份进行判断,分别将"夏季"、"秋季"和"冬季"添加到`season`列表中,并将相应的`season_list`元素置为1。

最后,将该分组的名称作为`result`字典的键,对应的结果作为值存储起来。结果字典的值包括:'出现的月份'、'总共出现的月份数'、'出现的季节'、'季节数'以及'季节列表'。这样,在每次迭代结束后,`result`字典就会记录了每个分组的统计信息。

通过这段代码,您可以获取每个分组出现的月份、总共出现的月份数以及该分组所处的季节信息,并将这些统计信息存储在结果字典中,以便后续分析和使用。

当对一个`GroupBy`对象进行迭代时,会返回一个由元组`(name, group)`组成的迭代器。其中,`name`表示分组的名称,`group`表示相应的分组数据。

具体迭代的过程如下:

1. 首先,根据指定的列对数据进行分组,生成`GroupBy`对象 `grouped`。

2. 使用`for name, group in grouped`语法,开始对`grouped`进行迭代。在每次迭代中,会将一个分组的名称赋值给`name`,将该分组的数据赋值给`group`。

3. 在每个迭代中,你可以通过`name`获取当前分组的唯一标识,可以通过`group`来进行该分组内的其他操作和处理。

4. 继续迭代,直到遍历完所有的分组。

总的来说,这个迭代过程允许您逐个访问每个分组,并对每个分组进行操作和分析,比如计算统计量、应用函数等。您可以根据实际需求在每次迭代中进行适当的处理。

 输出结果:

代码3 

count_all=0
count_all_list = []
for key, value in result.items():if value['季节数']==4:count_all+=1count_all_list.append(key)print(count_all)print(count_all_list)

result.items() 返回一个字典中的所有键值对。这个方法把字典中的每一个键值对都转化为(键, 值)的元组,然后把这些元组放到一个迭代器中。

这段代码是在result字典中针对每个键值对进行操作,并统计符合条件的键值对的数量。

首先,定义了一个变量count_all和一个列表count_all_listcount_all记录包含4个季节的所有分组的数量,count_all_list记录符合条件的分组的名称。

然后,使用for key, value in result.items()语法,开始从result字典中逐个取出键和值,进行循环操作。在循环中,使用if value['季节数']==4的语法来判断当前字典的季节数是否为4,如果是,就将该分组的名称添加到count_all_list中,并将count_all自增1。

最后,通过print(count_all)print(count_all_list)语句,将符合条件的分组数量和分组名称输出。

输出如下:

 代码4

df['年份']=df['日期'].dt.year
result=df.groupby(['单品编码','年份']).agg({'日期':'nunique'}).reset_index()
result.rename(columns={'日期':'天数'},inplace=True)

第一行就不介绍了,在python学习1-CSDN博客中已经介绍过

接下来,使用 `df.groupby(['单品编码','年份'])` 对数据框 `df` 进行分组操作,按照 '单品编码' 和 '年份' 进行分组。然后,通过 `.agg({'日期':'nunique'})` 对分组后的每个组进行聚合操作,对 '日期' 列应用 `nunique()` 函数,计算每个组中独特日期值的数量。这样,结果数据框 `result` 将包含 '单品编码'、'年份' 和 '日期'(记为 '天数')三个列。

最后,通过 `.reset_index()` 重置 `result` 数据框的索引,将多级索引还原为默认的整数索引。然后使用 `.rename(columns={'日期':'天数'}, inplace=True)` 的方式,将 '日期' 列的名称改为 '天数'。这样,`result` 数据框就得到了最终的结果。

通过以上的操作,您可以得到按照 '单品编码' 和 '年份' 进行分组的数据框 `result`,其中记录了每个组中独特日期值的数量。这个结果可以帮助您进行进一步的数据分析和处理。

.agg() 是 pandas 库用于分组数据计算的方法,其可以用于对 DF 或者 Series 数据进行一些分组操作,并对分组后的数据进行需要的一些聚合处理。其中,{'日期':'nunique'} 这个参数是 .agg() 中最重要的一部分。

{'日期':'nunique'} 表示对于 ‘日期’ 这一列的数据,应用 nunique() 函数进行聚合,具体含义是,分组后统计每个组(例如每个商品以及每个年份)中独特日期值的数量,即去重后的独特日期值的数量。

nunique() 函数用于计算一列数据中除去重复值之外的独特(唯一)值的数量,其语法格式为:Series.nunique(dropna=True),其中:

  • Series 为要统计独特值的数据列;
  • dropna 表示是否排除空值,默认为 True,即排除空值。

在上面的代码中,由于分组使用了 ‘单品编码’ 和 ‘年份’ 两个列,所以会对所有在同一年份中的同一种商品进行分组,统计该商品在该年份内销售的天数,最终将结果存储在 ‘天数’ 列中。

代码5

max_days=result.groupby('单品编码')['天数'].max().reset_index()
#print(max_days)
plt.hist(max_days['天数'],bins=35,edgecolor='k')
plt.xlabel('天数')
plt.ylabel('频数')
plt.title('天数分布直方图')
plt.show()
filtered_df=max_days[max_days['天数']<=15]
cnt=0
cnt_list=[]
for index,row in filtered_df.iterrows():cnt_list.append(row['单品编码'])print(f"单品编码:{row['单品编码']},一年最多出现{row['天数']}天")cnt+=1print(cnt)

这段代码的作用是,首先通过 `result` 数据框中的 '单品编码' 列和 '天数' 列计算出每个单品在最多的一年内销售的天数,并将结果保存在 `max_days` 数据框中;然后,绘制 `max_days` 数据框中 '天数' 列的频数分布直方图,以便进行天数分布的可视化;最后把最多销售天数小于等于 15 天的单品筛选出来,输出它们在其销售最多一年内的销售天数,并统计筛选出的单品数量。

具体解释如下:

`max_days=result.groupby('单品编码')['天数'].max().reset_index()`: 通过对 `result` 数据框按照 '单品编码' 列进行分组,对每组中的 '天数' 列求出最大值,表示该单品在最多的一年内销售的天数,从而得到结果数据框 `max_days`。

`plt.hist(max_days['天数'],bins=35,edgecolor='k')`: 使用 `plt.hist()` 可视化库,绘制直方图,并将 `max_days` 数据框中的 '天数' 列作为参数传入,以便绘制该列的分布图。`bins=35` 表示直方图的数量为 35,`edgecolor='k'` 表示直方图的边界颜色为黑色。

`plt.xlabel('天数')` 和 `plt.ylabel('频数')`: 分别指定直方图的横轴和纵轴的标签。

`plt.title('天数分布直方图')`: 指定直方图的标题。

`plt.show()`: 显示绘制出来的直方图。

`filtered_df=max_days[max_days['天数']<=15]`: 从 `max_days` 数据框中筛选出在最多销售天数小于等于 15 天的单品,将结果存储在 `filtered_df` 数据框中。

`cnt=0` 和 `cnt_list=[]`: 分别初始化计数器和空列表。

`for index,row in filtered_df.iterrows():`: 对 `filtered_df` 数据框进行遍历,依次读取每一行数据。

- `cnt_list.append(row['单品编码'])`:将当前行数据中的 '单品编码' 列的值加入到列表 `cnt_list` 中。

- `print(f"单品编码:{row['单品编码']},一年最多出现{row['天数']}天")`:输出当前行数据中的 '单品编码'和 '天数'列的值。

- `cnt+=1` 和 `print(cnt)`:对计数器进行累加操作,并输出当前筛选出的单品数量。

通过以上操作,可以将所有在其销售最多一年内销售天数小于等于15天的单品筛选出来,并将它们在最多销售天数的那一年内的销售天数打印出来,方便进行进一步的数据分析和处理。同时,直方图也可以让我们更加直观的了解不同单品销售天数的分布情况。

学习1的总代码

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=[u'simHei']
plt.rcParams['axes.unicode_minus']=Falsexlsx_file = 'data/附件1.xlsx'
df_1 = pd.read_excel(xlsx_file)xlsx_file = 'data/附件3.xlsx'
df = pd.read_excel(xlsx_file)df['日期']=pd.to_datetime(df['日期'])
df['月份']=df['日期'].dt.monthmapping_dict=df_1.set_index('单品编码')['分类名称'].to_dict()
df['品类']=df['单品编码'].map(mapping_dict)
print(df.head(5))grouped=df.groupby('单品编码')
result={}for name, group in grouped:unique_months=group['月份'].unique()total_months=len(unique_months)season=[]season_list=[0]*4if 3 in unique_months or 4 in unique_months or 5 in unique_months:season.append("春季")season_list[0]=1if 6 in unique_months or 7 in unique_months or 8 in unique_months:season.append("夏季")season_list[1] = 1if 9 in unique_months or 10 in unique_months or 11 in unique_months:season.append("秋季")season_list[2] = 1if 12 in unique_months or 1 in unique_months or 2 in unique_months:season.append("冬季")season_list[3] = 1result[name]={'出现的月份':unique_months,'总共出现的月份数':total_months,'出现的季节':season,"季节数":len(season),"季节列表":season_list}
count_all=0
count_all_list = []
for key, value in result.items():if value['季节数']==4:count_all+=1count_all_list.append(key)
print(count_all)
print(count_all_list)df['年份']=df['日期'].dt.year
result=df.groupby(['单品编码','年份']).agg({'日期':'nunique'}).reset_index()
result.rename(columns={'日期':'天数'},inplace=True)#print(result)max_days=result.groupby('单品编码')['天数'].max().reset_index()
#print(max_days)
plt.hist(max_days['天数'],bins=35,edgecolor='k')
plt.xlabel('天数')
plt.ylabel('频数')
plt.title('天数分布直方图')
plt.show()
filtered_df=max_days[max_days['天数']<=15]
cnt=0
cnt_list=[]
for index,row in filtered_df.iterrows():cnt_list.append(row['单品编码'])print(f"单品编码:{row['单品编码']},一年最多出现{row['天数']}天")cnt+=1print(cnt)

这段代码只是将两个表格中的数据进行一系列的预处理,按照时间分类

总输出如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/219461.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pandas-DataFtame的索引与切片(第3讲)

Pandas-DataFtame的索引与切片(第3讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

maui 调用文心一言开发的聊天APP 3

主要是对代码进行了优化 上一个版本写死了帐号跟密码 &#xff0c;这一个帐本有户可以直接设置对相关的key以及secret如果设置错时&#xff0c;在聊天中也会返回提示。注册帐号时同时也设置了key及secrete升级到了net.8.0导出APK&#xff0c;上一个版本是导出abb.解决了变型问…

【设计模式-2.4】创建型——抽象工厂模式

说明&#xff1a;本文介绍设计模式中&#xff0c;创建型设计模式的抽象工厂设计模式&#xff1b; 工厂模式的问题 在【设计模式-2.2】创建型——简单工厂和工厂模式这篇博文中&#xff0c;介绍过飞机大战游戏里&#xff0c;使用简单工厂和工厂模式来创建坦克、飞机、Boss对象…

Java之Clonable接口和深浅拷贝

Clonable接口 我们船舰了一个人的对象&#xff0c;想要克隆一个一模一样的对象&#xff0c;可以用到object类里面的克隆方法 object不是所有类的父类吗&#xff1f;那为什么用person1点不出这个方法呢&#xff1f;可以看一下源码 这是Object类里面的clone方法的声明&#xff0…

Linux下FFmepg使用

1.命令行录一段wav,PCM数据 ffmpeg -f alsa -i hw:0,0 xxx.wav//录制 ffplay out.wav//播放ffmpeg -f alsa -i hw:0,0 -ar 16000 -channels 1 -f s16le 1.pcm ffplay -ar 16000 -channels 1 -f s16le 1.pcm -ar freq 设置音频采样率 -ac channels 设置通道 缺省为1 2.将pcm…

基于C/C++的rapidxml加载xml大文件 - 下部分

下载地址: RapidXml (sourceforge.net)https://rapidxml.sourceforge.net/ 将源码添加到自己的工程中 示例测试大文件耗时: 总共293w行数据&#xff0c;大概耗时不到1s。

Mr. Cappuccino的第65杯咖啡——MacOS安装Docker

MacOS安装Docker 下载Docker安装Docker查看Docker相关信息镜像加速 下载Docker Docker官网 Docker文档中心 Docker桌面版下载地址 安装Docker 查看Docker相关信息 docker --versiondocker info镜像加速 阿里云镜像加速器 "registry-mirrors": ["https://gq8…

【案例】--“特别抢购”案例

目录 一、案例背景二、技术方案思路三、技术方案具体设计3.1、表设计3.2、Java代码实现一、案例背景 A公司向供应商B公司买了一套软件产品。B公司的这套产品有多个应用系统服务【如appId1、appId2、appId3】,每个应用都有各自的业务应用场景,但都需要管理文档,那么就需要磁…

网络基础——路由协议及ensp操作

目录 一、路由器及路由表 1.路由协议&#xff1a; 2.路由器转发原理&#xff1a; 3.路由表&#xff1a; 二、静态路由优缺点及特殊静态路由默认路由 1.静态路由的优缺点&#xff1a; 2.下一跳地址 3.默认路由 三、静态路由配置 四、补充备胎 平均负载 五、补充&…

计算机网络:网络层(无分类编址CIDR、计算题讲解)

带你快速通关期末 文章目录 前言一、无分类编址CIDR简介二、构成超网三、最长前缀匹配总结 前言 我们在前面知道了分类地址&#xff0c;但是分类地址又有很多缺陷&#xff1a; B类地址很快将分配完毕!路由表中的项目急剧增长! 一、无分类编址CIDR简介 无分类域间路由选择CI…

fckeditor编辑器改造示例:增加PRE,CODE控件

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 修改方法&#xff1a;1&#xff09;修改fckco…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前&#xff0c;就想用纯FPGA做一套控制系统。可…

期末数组函数加强练习

目录 开胃菜&#xff1a; 第一题&#xff1a;求简单交错序列前N项和 第二题&#xff1a;最小回文数&#xff1a; 数组&#xff1a; 第一题&#xff1a;矩阵的对角线求和 第二题&#xff1a;数组插入处理 第三题&#xff1a;数字逆序输出 第五题&#xff1a;最小数和它的…

论文阅读:Lidar Annotation Is All You Need

目录 概要 Motivation 整体架构流程 技术细节 小结 概要 论文重点在探讨利用点云的地面分割任务作为标注&#xff0c;直接训练Camera的精细2D分割。在以往的地面分割任务中&#xff0c;利用Lidar来做地面分割是目前采用激光雷达方案进行自动驾驶的常见手段。来自Evocargo …

一篇文章了解Flutter Json系列化和反序列化

目录 一. 使用dart:convert实现JSON格式编解码1. 生成数据模型类2. 将JSON数据转化成数据模型类3. 数据模型类转化成JSON字符串 二、借助json_serializable实现Json编解码1.添加json_annotation、build_runner、json_serializable依赖2. 创建一个数据模型类3. 使用命令行生成JS…

819. 最常见的单词

819. 最常见的单词 Java&#xff1a;split() 过滤 class Solution {public String mostCommonWord(String paragraph, String[] banned) {String s paragraph.replaceAll("\\p{Punct}", " "); // 去除所有标点符号String arr[] s.split(" "…

遗传算法应用-- 栅格法机器人路径规划

文章目录 一、遗传算法1.1 编码与解码1.2 选择算子-轮盘赌法1.3 交叉算子1.4 变异算子1.5 遗传算法流程1.6 基于遗传算法的栅格法机器人路径规划 二、采用模拟退火算法改善适应度函数 一、遗传算法 遗传算法 (Genetic AIgorithm, 简称 GA)起源于对生物系统所进行的计算机模拟研…

1.3 第一个C程序

一、Dev-C的安装 下载地址&#xff1a;https://sourceforge.net/projects/orwelldevcpp/ 二、Dev-C简单的使用 2.1 首次打开配置 2.2 第一个程序的编辑、编译、运行 三、Hello Word程序讲解 3.1 程序框架 几乎所有的程序都需要这一段代码 3.2 输出 printf("Hello World…

workflow系列教程(4)Parallel并联任务流

往期教程 如果觉得写的可以,请给一个点赞关注支持一下 观看之前请先看,往期的博客教程,否则这篇博客没办法看懂 workFlow c异步网络库编译教程与简介 C异步网络库workflow入门教程(1)HTTP任务 C异步网络库workflow系列教程(2)redis任务 workflow系列教程(3)Series串联任务流…

AICore 带来了 Android 专属的 AI 能力,它要解决什么?采用什么架构思路?

前言 Google 最近发布的 Gemini 模型在全球引起了巨大反响&#xff0c;其在多模态领域的 Video demo 无比震撼。对于 Android 开发者而言&#xff0c;其中最振奋人心的消息莫过于 Gemini Nano 模型将内置到 Android 系统当中&#xff0c;并开放给开发者使用。 事实上&#xf…