当前位置: 首页 > news >正文

python中pandas模块数据处理小案例

内容目录

      • 1. 添加随机日期
      • 2. 聚合求和
      • 3.聚合求和排序
      • 4. 聚合求和排序取前十
      • 5. 聚合取极值
      • 6. 重新赋值
      • 7. 按条件赋值

pandas作为数据处理的得力工具,简便了数据开发过程,之前串联了pandas的使用方法,现在用几个小案例巩固一下常用的pandas方法。

前一章节的pandas使用链接:pandas模块的使用
假设有一个数据文件,是某个网站的点击、下单记录(说明:数据只是模拟案例提供使用,没有任何实际意义)

page click add pay cost		
1516609143869 2 8 92 9

假设一行数据如上所示,分别为页面、点击、添加、支付、花费等字段,那么需要实现的功能如下。

1. 添加随机日期

数据缺少日期,为了模拟数据,需要对每行数据增加一个随机日期,要求:日期范围在2023-01-01 至 2023-01-15之间

# TODO 1 : 读入数据到DataFrame
data = pd.DataFrame(pd.read_table(path, sep= ' ', header=None, names=['page','click','add','pay','cost']))

为每行数据增加一个随机日期

# TODO 2 : 增加随机日期,范围在01-01,01-15之间
dates = pd.date_range(start='2023-01-01', end='2023-01-15', periods=len(data))
date_rng_formatted = [date.strftime("%Y-%m-%d") for date in dates]data['dt'] = np.random.choice(date_rng_formatted, len(data))

2. 聚合求和

要求:按照page字段聚合,求click、add、pay的和

# TODO 3 : 每个页面的总共点击、添加、支付、花费总
df_sum = data.groupby('page').agg({'click':'sum','add':'sum','pay':'sum', 'cost':'sum'})

3.聚合求和排序

要求:每个页面的总共点击、添加、支付、花费总量按照点击、添加、支付、花费排序

# TODO 4 : 每个页面的总共点击、添加、支付、花费总量按照点击、添加、支付、花费排序
df_sort = data.groupby('page').agg({'click':'sum','add':'sum','pay':'sum', 'cost':'sum'}).sort_values(['click','add','cost'],ascending=False)

4. 聚合求和排序取前十

这里分为两个类别:

  1. 聚合求和排序后取全部的前十
# 方法一
# TODO 5 : 每个页面的总共点击、添加、支付、花费总量按照点击、添加、支付、花费排序,取前十
df_sort_get = data.groupby('page').agg({'click':'sum','add':'sum','pay':'sum', 'cost':'sum'}).sort_values(['click','add','cost'],ascending=False).head(10)#方法二
df_sort_get = data.groupby('page').agg({'click':'sum','add':'sum','pay':'sum', 'cost':'sum'}).sort_values(['click','add','cost'],ascending=False).iloc[:10]
  1. 聚合求和排序后取每个分组的前十
# TODO 6 : 每个页面总共点击、添加、支付的总和排序并取组内前十
df_group_sort_get = data.sort_values(['click','add','cost'], ascending=False).groupby('page').head(5).iloc[:,[0,1,2,3]]

5. 聚合取极值

要求:按照日期,取每个日期里点击量最多的记录

# TODO 7 : 求每日点击总和最多的页面并按照dt字段升序输出
df_dt_page = data.groupby(['page','dt']).agg({'click':'sum'}).sort_values(['click'], ascending=False).groupby('dt').head(1).sort_values('dt')

6. 重新赋值

要求:将每个页面总点击数量不超过100的重新赋值为0

# TODO 8 : 将每个页面总点击数量不超过100的重新赋值为0
data_sum = data.groupby(['page']).agg({'click':'sum'})
data_sum.loc[data_sum['click']<100,'click'] = 0

7. 按条件赋值

要求:将每个页面总点击数量不超过100的重新赋值为0,否则为1,并赋予新列

# TODO 9 : 将每个页面总点击数量不超过100的重新赋值为0,否则为1,并赋予新列
data_sum_tmp = data.groupby(['page']).agg({'click':'sum'})
def func(x):if x['click'] < 100:return 0else:return 1
data_sum_tmp['new_cloumn'] = data_sum_tmp.apply(func, axis=1)

以上列举了几个常用到的pandas处理方法,但是不够全面,在真实使用下肯定用到的方法和技巧会更多,需要多多练习和总结。

http://www.lryc.cn/news/42158.html

相关文章:

  • 从 X 入门Pytorch——Tensor的自动微分、计算图,常见的with torch.no_grad()机制
  • 三十七、实战演练之接口自动化平台的文件上传
  • 菜鸟刷题Day1
  • cjson文件格式介绍
  • 【Nginx二】——Nginx常用命令 配置文件
  • 3月最新!AIGC公司生态地图;开发者实用ChatGPT工具清单;上手必会的SD绘图教程;字幕组全自动化流程大公开 | ShowMeAI日报
  • python - 递归函数
  • ring_log环形日志-6M缓冲区_proc接口
  • Linux内核进程管理几种CPU调度策略
  • SpringBoot整合Flink(施耐德PLC物联网信息采集)
  • DFS(深度优先搜索)和BFS(宽度优先搜索)
  • Redis缓存穿透、击穿、雪崩问题及解决方法
  • HAL库 STM32 串口通信
  • 2023-第十四届蓝桥杯冲刺计划!
  • 内网渗透基础知识
  • 鸟哥的Linux私房菜 正则表示法与文件格式化处理
  • 1630.等差子数组
  • CSS 属性计算过程
  • ThinkPHP02:路由
  • 制作简单进销存管理系统(C#)
  • css总结9(过渡和2D变换)
  • SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】
  • 【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
  • [数据结构]直接插入排序、希尔排序
  • CNN、LeNet、AlexNet、VGG、GoogLeNet、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等的关系
  • IO-day1-(fscanf、fprintf.........)
  • C++类和对象(上篇)
  • 解决Xshell无法连接Kali Linux 2020.1(2019.3)版本
  • 项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?
  • Linux使用宝塔面板搭建网站,并内网穿透实现公网访问