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.mzph.cn/news/224918.shtml

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

相关文章

Axure的动态图使用以及说明

认识Axure动态图 Axure动态图是Axure中的一种功能&#xff0c;它允许用户在原型中添加动画效果和交互动作&#xff0c;使原型更加生动和具有真实的用户体验。用户可以通过添加动态图来展示页面过渡、按钮点击、下拉菜单等交互操作的效果。 这是&#xff1a;就是我们今天要叫的…

生产环境_Spark处理轨迹中跨越本初子午线的经度列

使用spark处理数据集&#xff0c;解决gis轨迹点在地图上跨本初子午线的问题&#xff0c;这个问题很复杂&#xff0c;先补充一版我写的 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.func…

【️什么是分布式系统的一致性 ?】

&#x1f60a;引言 &#x1f396;️本篇博文约8000字&#xff0c;阅读大约30分钟&#xff0c;亲爱的读者&#xff0c;如果本博文对您有帮助&#xff0c;欢迎点赞关注&#xff01;&#x1f60a;&#x1f60a;&#x1f60a; &#x1f5a5;️什么是分布式系统的一致性 &#xff1f…

Linux---查看文件内容命令

1. 查看文件内容命令的使用 命令说明cat查看小型文件more分屏查看大型文件 cat命令的效果图 说明: cat命令结合重定向可以完成多个文件的合并gedit 文件编辑命令&#xff0c;可以查看和编辑文件 more命令的效果图 当查看内容信息过长无法在一屏上显示时&#xff0c;可以使…

mysql 数据库 关于库的基本操作

库的操作 如果想到 mysql 客户端当中数据 系统当中的命令的话&#xff0c;直接输入的话&#xff0c;会被认为是 mysql 当中的命令。 所以&#xff0c;在mysql 当中执行系统当中的命令的话&#xff0c;要在系统命令之前带上 ststem &#xff0c;表示系统命令&#xff1a; 但是…

linux内核使用ppm图片开机

什么是ppm图片 PPM&#xff08;Portable Pixmap&#xff09;是一种用于存储图像的文件格式。PPM图像文件以二进制或ASCII文本形式存储&#xff0c;并且是一种简单的、可移植的图像格式。PPM格式最初由Jef Poskanzer于1986年创建&#xff0c;并经过了多次扩展和修改。 PPM图像…

笔记本电脑如何安装openwrt

环境&#xff1a; 联想E14笔记本 装机U盘 DiskImage v1.6 刷写工具 immortalwrt镜像 问题描述&#xff1a; 笔记本电脑如何安装openwrt 解决方案&#xff1a; 一、官方版 1.官网下载固件 2.BIOS关闭安全启动改为引导 3.用U盘启动进入PE系统后&#xff0c;需要先用PE系…

数组笔试题解析(下)

数组面试题解析 字符数组 &#xff08;一&#xff09; 我们上一篇文章学习了一维数组的面试题解析内容和字符数组的部分内容&#xff0c;我们这篇文章讲解一下字符数组和指针剩余面试题的解析内容&#xff0c;那现在&#xff0c;我们开始吧。 我们继续看一组字符数组的面试…

深眸科技聚焦AI+机器视觉产业化建设,加速智能制造国产替代升级

随着科技的不断发展&#xff0c;传统的制造生产已经无法满足现代制造业的需求&#xff0c;智能制造应运而生&#xff0c;以智能化、柔性化等生产优势&#xff0c;大幅提升制造效率和生产质量。智能制造是指具有信息自感知、自决策、自执行等功能的先进制造过程、系统与模式的总…

美易官方:零售销售数据提振信心

美易全球投资中心副总裁Kenny Jolin表示全球股市在经历了动荡之后逐渐恢复了稳定。最近&#xff0c;美国股市表现强劲&#xff0c;连续六天上涨&#xff0c;道琼斯指数也创下了新高。这一趋势不仅反映了投资者信心的恢复&#xff0c;也表明了全球经济正在逐渐复苏。 他说&#…

如何在jenkins容器中安装python+httprunner+pytest+git+allure(一)

背景&#xff1a; API接口自动化使用python语言实现&#xff0c;利用httprunner框架编写自动化用例场景&#xff08;执行的时候还是依赖pytest),使用jenkins自动构建git上的源代码&#xff0c;并产生allure报告可视化展示API执行结果。 步骤 1.进入jenkins容器 注意使用roo…

WPF 基于TableControl的页面切换

文章目录 前言其它项目的UserControl切换TableControl添加按钮&#xff0c;隐去TableItem的Header 结论 前言 我想用WPF简单实现一个按钮视图切换的效果&#xff0c;但是我发现别人的实现效果非常的麻烦。 其它项目的UserControl切换 我网上找了个开源的项目&#xff0c;他是…

【Spring教程29】Spring框架实战:从零开始学习SpringMVC 之 服务器响应知识全面详解

目录 1 环境准备2 响应页面3 返回文本数据4 响应JSON数据5 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配…

uniapp:使用fixed定位,iOS平台的安全区域问题解决

manifest.json > 添加节点 "safearea": { //iOS平台的安全区域"background": "#1C1E22","backgroundDark": "#1C1E22", // HX 3.1.19支持"bottom": {"offset": "auto"} },已解决&#xff…

OpenAI发布了一份提示工程指南(Prompt Engineering Guide)

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 Open AI 发布了一份很棒的提示工程指南。 以下是在 GPT-4 使用提示时获得更好结果的 6 种策略的总结:

elasticsearch|大数据|kibana的安装(https+密码)

前言&#xff1a; kibana是比较好安装的&#xff0c;但https密码就比较麻烦一些了&#xff0c;下面将就如何安装一个可在生产使用的kibana做一个简单的讲述 一&#xff0c; kibana版本和下载地址 这里我想还是强调一下&#xff0c;kibana的版本需要和elasticsearch的版本一…

【FunASR】Paraformer语音识别-中文-通用-16k-离线-large-onnx

模型亮点 模型文件: damo/speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-pytorchParaformer-large长音频模型集成VAD、ASR、标点与时间戳功能&#xff0c;可直接对时长为数小时音频进行识别&#xff0c;并输出带标点文字与时间戳&#xff1a; ASR模型…

vue中哪些数组的方法可以做到响应式

Vue2 中为什么直接通过数组的索引修改元素是不会触发视图更新 vue2 为什么不直接监听数组 Vue2 对于数组提供了一些变异方法 重写数组方法源码分析 定义拦截器将拦截器挂载到数组上面收集依赖 扩展&#xff1a;理解Vue2如何解决数组和对象的响应式问题 对复杂对象的处理 复杂对…

目标检测图片截取目标分类图片

如果要训练一个分类模型却没有特定的分类数据集怎么办呢&#xff1f;可以换一种思路&#xff0c;将带有该目标的图片对所有想要的目标进行画标注框然后进行截图&#xff0c;就能得到特定的分类数据了。这么做的目的是&#xff1a;带有该目标的图片可能不会少&#xff0c;但是带…

MySQL作为服务端的配置过程与实际案例

MySQL是一款流行的关系型数据库管理系统&#xff0c;广泛应用于各种业务场景中。作为服务端&#xff0c;MySQL的配置过程对于数据库的性能、安全性和稳定性至关重要。本文将详细介绍MySQL作为服务端的配置过程&#xff0c;并通过一个实际案例进行举例说明。 一、MySQL服务端配…