网站建设与管理维护的答案李建青,厦门seo招聘,网站建设 客户同程,信誉好的徐州网站建设大家好#xff0c;这里是七七#xff0c;这个专栏是用代码实例来学习的#xff0c;不是去介绍很多知识的。
话不多说#xff0c;开始今天的内容
目录
代码1
代码2
代码3 代码4
代码5
学习1的总代码 代码1
groupeddf.groupby(单品编码)
result{}
groupeddf.groupb…大家好这里是七七这个专栏是用代码实例来学习的不是去介绍很多知识的。
话不多说开始今天的内容
目录
代码1
代码2
代码3 代码4
代码5
学习1的总代码 代码1
groupeddf.groupby(单品编码)
result{}
groupeddf.groupby(单品编码)是对名为df的数据框按照列名为’单品编码’进行分组操作。这将返回一个GroupBy对象该对象可以用于按照分组对数据进行聚合操作。
然后result{}是创建一个空字典对象。
代码2
for name, group in groupedunique_monthsgroup[月份].unique()total_monthslen(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_all0
count_all_list []
for key, value in result.items():if value[季节数]4:count_all1count_all_list.append(key)print(count_all)print(count_all_list) result.items() 返回一个字典中的所有键值对。这个方法把字典中的每一个键值对都转化为(键, 值)的元组然后把这些元组放到一个迭代器中。 这段代码是在result字典中针对每个键值对进行操作并统计符合条件的键值对的数量。
首先定义了一个变量count_all和一个列表count_all_list。count_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
resultdf.groupby([单品编码,年份]).agg({日期:nunique}).reset_index()
result.rename(columns{日期:天数},inplaceTrue)
第一行就不介绍了在python学习1-CSDN博客中已经介绍过
接下来使用 df.groupby([单品编码,年份]) 对数据框 df 进行分组操作按照 单品编码 和 年份 进行分组。然后通过 .agg({日期:nunique}) 对分组后的每个组进行聚合操作对 日期 列应用 nunique() 函数计算每个组中独特日期值的数量。这样结果数据框 result 将包含 单品编码、年份 和 日期记为 天数三个列。
最后通过 .reset_index() 重置 result 数据框的索引将多级索引还原为默认的整数索引。然后使用 .rename(columns{日期:天数}, inplaceTrue) 的方式将 日期 列的名称改为 天数。这样result 数据框就得到了最终的结果。
通过以上的操作您可以得到按照 单品编码 和 年份 进行分组的数据框 result其中记录了每个组中独特日期值的数量。这个结果可以帮助您进行进一步的数据分析和处理。 .agg() 是 pandas 库用于分组数据计算的方法其可以用于对 DF 或者 Series 数据进行一些分组操作并对分组后的数据进行需要的一些聚合处理。其中{日期:nunique} 这个参数是 .agg() 中最重要的一部分。 {日期:nunique} 表示对于 ‘日期’ 这一列的数据应用 nunique() 函数进行聚合具体含义是分组后统计每个组例如每个商品以及每个年份中独特日期值的数量即去重后的独特日期值的数量。 nunique() 函数用于计算一列数据中除去重复值之外的独特唯一值的数量其语法格式为Series.nunique(dropnaTrue)其中 Series 为要统计独特值的数据列dropna 表示是否排除空值默认为 True即排除空值。 在上面的代码中由于分组使用了 ‘单品编码’ 和 ‘年份’ 两个列所以会对所有在同一年份中的同一种商品进行分组统计该商品在该年份内销售的天数最终将结果存储在 ‘天数’ 列中。 代码5
max_daysresult.groupby(单品编码)[天数].max().reset_index()
#print(max_days)
plt.hist(max_days[天数],bins35,edgecolork)
plt.xlabel(天数)
plt.ylabel(频数)
plt.title(天数分布直方图)
plt.show()
filtered_dfmax_days[max_days[天数]15]
cnt0
cnt_list[]
for index,row in filtered_df.iterrows():cnt_list.append(row[单品编码])print(f单品编码{row[单品编码]},一年最多出现{row[天数]}天)cnt1print(cnt)
这段代码的作用是首先通过 result 数据框中的 单品编码 列和 天数 列计算出每个单品在最多的一年内销售的天数并将结果保存在 max_days 数据框中然后绘制 max_days 数据框中 天数 列的频数分布直方图以便进行天数分布的可视化最后把最多销售天数小于等于 15 天的单品筛选出来输出它们在其销售最多一年内的销售天数并统计筛选出的单品数量。
具体解释如下
max_daysresult.groupby(单品编码)[天数].max().reset_index(): 通过对 result 数据框按照 单品编码 列进行分组对每组中的 天数 列求出最大值表示该单品在最多的一年内销售的天数从而得到结果数据框 max_days。
plt.hist(max_days[天数],bins35,edgecolork): 使用 plt.hist() 可视化库绘制直方图并将 max_days 数据框中的 天数 列作为参数传入以便绘制该列的分布图。bins35 表示直方图的数量为 35edgecolork 表示直方图的边界颜色为黑色。
plt.xlabel(天数) 和 plt.ylabel(频数): 分别指定直方图的横轴和纵轴的标签。
plt.title(天数分布直方图): 指定直方图的标题。
plt.show(): 显示绘制出来的直方图。
filtered_dfmax_days[max_days[天数]15]: 从 max_days 数据框中筛选出在最多销售天数小于等于 15 天的单品将结果存储在 filtered_df 数据框中。
cnt0 和 cnt_list[]: 分别初始化计数器和空列表。
for index,row in filtered_df.iterrows():: 对 filtered_df 数据框进行遍历依次读取每一行数据。
- cnt_list.append(row[单品编码])将当前行数据中的 单品编码 列的值加入到列表 cnt_list 中。
- print(f单品编码{row[单品编码]},一年最多出现{row[天数]}天)输出当前行数据中的 单品编码和 天数列的值。
- cnt1 和 print(cnt)对计数器进行累加操作并输出当前筛选出的单品数量。
通过以上操作可以将所有在其销售最多一年内销售天数小于等于15天的单品筛选出来并将它们在最多销售天数的那一年内的销售天数打印出来方便进行进一步的数据分析和处理。同时直方图也可以让我们更加直观的了解不同单品销售天数的分布情况。
学习1的总代码
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif][usimHei]
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_dictdf_1.set_index(单品编码)[分类名称].to_dict()
df[品类]df[单品编码].map(mapping_dict)
print(df.head(5))groupeddf.groupby(单品编码)
result{}for name, group in grouped:unique_monthsgroup[月份].unique()total_monthslen(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_all0
count_all_list []
for key, value in result.items():if value[季节数]4:count_all1count_all_list.append(key)
print(count_all)
print(count_all_list)df[年份]df[日期].dt.year
resultdf.groupby([单品编码,年份]).agg({日期:nunique}).reset_index()
result.rename(columns{日期:天数},inplaceTrue)#print(result)max_daysresult.groupby(单品编码)[天数].max().reset_index()
#print(max_days)
plt.hist(max_days[天数],bins35,edgecolork)
plt.xlabel(天数)
plt.ylabel(频数)
plt.title(天数分布直方图)
plt.show()
filtered_dfmax_days[max_days[天数]15]
cnt0
cnt_list[]
for index,row in filtered_df.iterrows():cnt_list.append(row[单品编码])print(f单品编码{row[单品编码]},一年最多出现{row[天数]}天)cnt1print(cnt)
这段代码只是将两个表格中的数据进行一系列的预处理按照时间分类
总输出如下