使用pandas按照商品和下单人统计下单数据

目录

一:需求描述

二:代码实现

三:注意事项


一:需求描述

最近运营那边给到一个excel表格,是一个小程序用户的下单数据,要以商品为维度,统计用户下单情况,主要是下单的商品总金额,单数和总单数。

给到的表格数据如下:

考虑用pandas实现,pandas提供了大量的数据处理函数,可以进行各种复杂的数据处理,包括数据清洗、数据转换、数据聚合等。使用pandas先对商品进行去重,然后循环商品,找出所有下单的人,再对下单人进行去重,按照商品-下单人作为关联条件进行统计金额,单数

最终实现的表格数据如下:

这里出现一个问题,由于给的表格存在金额数据为空的数据,在pandas中,可以使用fillna()方法对DataFrame中的空值进行处理。fillna()方法可以接受一个参数,用于指定如何填充空值。这样我金把额填充为0,这样出现的情况就是只要存在下单人就算一单,不管金额。还有其中情况是把金额为空的用户去除,在pandas中,可以使用dropna(inplace=True)删除含有空值的行,这样只会统计有下单金额的用户数据。

二:代码实现

首先要需要确保已经安装了pandas库。如果尚未安装,可以使用以下命令进行安装:

pip install pandas

代码编写:

import pandas as pddir = 'D://python/'
df=pd.read_excel(dir+'test.csv')#这个会直接默认读取到这个Excel的第一个表单dic,label = [],('下单人','商品','金额','单数','总数')
#删除空值
df.dropna(inplace=True)
#把金额为空的填充0
#df.金额.fillna(0, inplace = True)
#print(df)for 商品 in df.商品.unique():下单人 = df[df.商品 == 商品].下单人总数= 下单人.shape[0]print(总数)for 下单人 in 下单人.unique():关联条件 = df[(df.商品 == 商品) & (df.下单人==下单人)].fillna('空值')单数,金额 = 关联条件.shape[0],关联条件.金额.sum()dic.append('~'.join(map(str,(eval(_) for _ in label))).split("~"))
print(dic)
#可以按照商品排序
data = pd.DataFrame(dic, columns=label).sort_values(by='商品')
data.to_excel(dir+'output1.xlsx', sheet_name='Sheet1',index=False)
#可以按照金额排序
data = pd.DataFrame(dic, columns=label).sort_values(by='金额')
data.to_excel(dir+'output1.xlsx', sheet_name='Sheet1',index=False)
三:注意事项

1:删除含有空值的行

df.dropna(inplace=True)

2:空值填充

df.fillna(0, inplace = True) 

3: 某个列空值填充

df.金额.fillna(0, inplace = True)

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

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

相关文章

多进程 案例

from multiprocessing import Process, Queueclass MyProcess(Process):def __init__(self, q, i):super().__init__()self.q qself.i idef run(self):print(子进程%s 开始put数据 % self.i)self.q.put(我是%s 通过Queue通信 % self.i)self.q.put(我是%s 通过Queue通信 % 2)i…

SpringBoot-Dubbo-Zookeeper

Apache Dubbo&#xff1a;https://cn.dubbo.apache.org/zh-cn/overview/home/ 依赖 <!--dubbo--> <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</versio…

CMake+大漠插件的应用开发——处理dm.dll,免注册调用大漠插件

文章目录 CMake大漠插件的应用开发——处理dm.dll&#xff0c;免注册调用大漠插件简介环境项目结构配置编译环境编码-直接调用 dll编码-生成tlh文件&#xff0c;便于提示 CMake大漠插件的应用开发——处理dm.dll&#xff0c;免注册调用大漠插件 简介 网上有一种使用方式是&am…

Navicat连接不上虚拟机中linux的dockers创建的mysql

说明&#xff1a;这个问题可能只是我的个人问题&#xff0c;记录一下吧。当发现这个问题的时候&#xff0c;去网上搜素了一下&#xff0c;搜到的文章基本上都是通过在mysql中设置允许远程访问解决的&#xff0c;然后我也跟着尝试了一下&#xff0c;问题并没有解决。后面就乱七八…

golang学习-golang结构体和Json相互转换

1、结构体转为json对象 v, _ : json.Marshal(student) jsonStr : string(v) // 结构体转为json对象 2、json字符串转为结构体 var s1 Student err : json.Unmarshal([]byte(str), &s1) //json 字符串转为结构体 3、结构体标签 表示的是转换为json对象时&#xff0c;ID字段…

allegro PCB设计心得笔记(二) PCB板框设计心得

Cadence Allegro软件设计PCB板框时&#xff0c;使用Add -> line&#xff0c;在Option选择Board Geometry/Outline&#xff0c;根据PCB需要输入对应坐标&#xff0c;设计好板框。 使用Z-Copy命令设计Route Keepin和Package Keepin时&#xff0c;需要先使用使用Shape -> Co…

【Python】Python语言 3小时速通(有C语言基础版)

python从入门到实践 变量 message"hello world"并不需要指出变量类型 方法 tittle()#以首字母大写的形式输出单词upper()#全部大写输出lower()#全部小写输出存储数据时经常使用lower&#xff0c;因为无法确保数据是大写还是小写 rstrip()#输出删除字符串尾部多余…

YOLOv5涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv5中如何使用 1)iAFF加入Neck替代Concat; 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文…

RabbitMQ 的基本概念

一 MQ 的基本概念 1 MQ概述 MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的&#xff0c;解决的是通信问…

三、GCC编译:链接

代码准备 main.c extern int shared; extern void func(int *a, int *b); int main(){int a 100;func(&a, &shared);return 0; }func.c int shared 1; int tmp 0; void func(int *a, int *b){tmp *a;*a *b;*b tmp; }静态链接 编译 gcc -static -fno-stack-p…

VB6 VBA asp的RecordSet.GetRows方法

1.VBA调用ADO执行SQL语句获取查询结果&#xff0c;通过RecordSet.GetRows方法获取到的数组是行列转置后的数组。 2.如果通过application.transpose对RecordSet.GetRows方法获取到的数组再进行转置&#xff0c;如果报错“运行时错误438&#xff1a;对象不支持该属性或方法”&am…

TypeScript学习笔记、鸿蒙开发学习笔记

变量定义方式 # 变量声明 let msg: string douzi console.log(msg) let num: number 20 console.log(num) let end: boolean true console.log("end" end) let a: any 10 a douzi console.log(a) let p {name:"douzi",age:20} console.log(p.name)…

hls转流服务的nginx配置和一些脚本

前言 当今&#xff0c;流媒体服务已成为互联网中不可或缺的重要组成部分。HLS&#xff08;HTTP Live Streaming&#xff09;作为一种流媒体传输协议&#xff0c;被广泛应用于视频直播、点播等应用场景中。而Nginx作为一款高性能的Web服务器&#xff0c;也可以被用于构建HLS转流…

《每天十分钟》-红宝书第4版-集合引用类型(二)

接着奏乐接着抄&#xff0c;续着上篇的数组 迭代器方法 const a ["zhangsan", "lisi", "wangwu"]; // 因为这些方法都返回迭代器&#xff0c;所以可以将它们的内容 // 通过 Array.from()直接转换为数组实例 const aKeys Array.from(a.keys(…

cmake-将源文件编译为可执行文件

文章目录 准备工作创建cmake文件编译源代码需要的文件不在同一个文件夹的情况 准备工作 首先我们准备三个文件 add.h int add(int a,int b);add.cpp int add(int a,int b) {return ab; }main.cpp #include "add.h" #include <iostream> int main() {in…

Multi-Concept Customization of Text-to-Image Diffusion——【代码复现】

本文是发表于CVPR 2023上的一篇论文&#xff1a;[2212.04488] Multi-Concept Customization of Text-to-Image Diffusion (arxiv.org) 一、引言 本文主要做的工作是对stable-diffusion的预训练模型进行微调&#xff0c;需要的显存相对较多&#xff0c;论文中测试时是在两块GP…

ssh远程登录协议

目录 一、ssh协议定义及特点 &#xff08;一&#xff09;ssh协议简介 &#xff08;二&#xff09;ssh协议的主要特点 二、ssh传输原理 三、sshd服务 &#xff08;一&#xff09;配置文件 &#xff08;二&#xff09;基本用法 1.直接连接 2.连接指定用户 3.指定端口号…

设计模式之策略模式【行为型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

谷歌推广该选择SEO还是Ads?谷歌技巧分享及实战

众所周知&#xff0c;谷歌是全球最大线上搜索引擎&#xff0c;已经成为消费者在进行线上购物时不可或缺的重要搜索工具&#xff0c;全球用户每天在谷歌上有着几十亿次的搜索行为。 所以现在越来越多的跨境丝氨酸选择在Google上投放广告&#xff0c;这也给卖家带来了非常精准的…

解决防爬虫机制方法(一)

最近为了完成学校的大数据的作业&#xff0c;老师要我们爬一个的网站&#xff0c;里面有还算不错的防爬机制&#xff0c;忙活了几天&#xff0c;总结出一些常见的防爬机制的应对方法&#xff0c;方法均来自个人实战总结&#xff0c;非专业爬虫角度分析 1.响应时间过快 1.1网速…