【pandas小技巧】--日期相关处理
日期处理相关内容之前pandas基础系列中有一篇专门介绍过,本篇补充两个常用的技巧。
1. 多列合并为日期
当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。
合并多列转换为日期类型,可以直接用 to_datetime函数来处理:
import pandas as pd
df = pd.DataFrame(
{
"year": ["2021", "2021",
"2022", "2022", "2022"],
"month": ["1", "3", "4", "4", "6"],
"day": ["10", "20", "4", "4", "1"],
"value": [1, 2, 3, 4, 5],
}
)
df["date"] = pd.to_datetime(
df[["year", "month", "day"]]
)
df = df.drop(
columns=["year", "month", "day"]
)
df

2. 基于日期的聚合统计
之所以要把列类型转换为日期类型,是因为pandas提供了针对日期类型的非常便利的聚合统计方法。
比如如下连续的日期数据:
df = pd.DataFrame(
{
"year": ["2022", "2022", "2023",
"2023", "2023"],
"month": ["12", "12", "1", "1", "1"],
"day": ["30", "31", "1", "1", "2"],
"value": [1, 2, 3, 4, 5],
}
)
df["date"] = pd.to_datetime(
df[["year", "month", "day"]]
)
df = df.drop(
columns=["year", "month", "day"]
)
df = df.loc[:, ::-1]
df

这里用了之前介绍过的一个小技巧 df.loc[:, ::-1],把date列放在value列之前,对数据处理没有什么影响,只是为了看数据的习惯。
得到转换好的数据之后,可以通过resample函数来聚合统计。resample是pandas提供的专门用于时间序列数据的聚合统计的。
2.1. 按年统计
ysum = df.resample("Y", on="date").value.sum()
ymean = df.resample("Y", on="date").value.mean()
stat = pd.DataFrame({
"sum": ysum,
"mean": ymean,
})
stat

示例数据只有两年的,统计后显示的是日期是年末最后一天。
这里为了演示只统计了合计值和平均值,实际可以根据情况统计需要的值。
2.2. 按月统计
msum = df.resample("M", on="date").value.sum()
mmean = df.resample("M", on="date").value.mean()
stat = pd.DataFrame({
"sum": msum,
"mean": mmean,
})
stat

统计后显示的日期是每个月月末的日期。
2.3. 按日统计
dsum = df.resample("D", on="date").value.sum()
dmean = df.resample("D", on="date").value.mean()
stat = pd.DataFrame({
"sum": dsum,
"mean": dmean,
})
stat

根据每天的日期统计。
2.4. 按季度统计
qsum = df.resample("Q", on="date").value.sum()
qmean = df.resample("Q", on="date").value.mean()
stat = pd.DataFrame({
"sum": qsum,
"mean": qmean,
})
stat

统计后显示的日期是每个季度的最后一天。
2.5. 按周统计
wsum = df.resample("W", on="date").value.sum()
wmean = df.resample("W", on="date").value.mean()
stat = pd.DataFrame({
"sum": wsum,
"mean": wmean,
})
stat

统计后显示的日期是每个周的周日。
2.6. 补充
resample函数支持的统计期间除了上面介绍的常用的年,月,日,周,季度等等,还有很多其他的期间,
具体参考:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases

【pandas小技巧】--日期相关处理的更多相关文章
- pandas小技巧
1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...
- Bootstrap 小技巧以及相关资源整理
1, Bootstrap Bundle (http://bootstrapbundle.com/): 提供了15中不同的MVC Bootstrap模板.[扩展和更新]中搜索“Bootstrap Bu ...
- pandas 小技巧
1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...
- JS、JQ相关小技巧积攒
JS.JQ相关小技巧积攒,以备不时之需. 1.js 获取时间差:时间戳相减.new Date().getTime() 获得毫秒数,除以(1000*60*60*24) 获得天数. 2.重定向操作:页面 ...
- Pandas一些小技巧
Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...
- 编写css相关注意事项以及小技巧
一.小技巧 1.对于开始写网站css之前一般都要对css进行重置(养成写注释的习惯): ;;} body{font-size:16px;} img{border:none;} li{list-styl ...
- php composer 相关及版本约束等小技巧
对于现代语言而言,包管理器基本上是标配.Java有Maven,Python有pip,Ruby有gem,Nodejs有npm.PHP的则是PEAR,不过PEAR坑不少: 依赖处理容易出问题 配置非常复杂 ...
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- ( 译、持续更新 ) JavaScript 上分小技巧(四)
后续如有内容,本篇将会照常更新并排满15个知识点,以下是其他几篇译文的地址: 第一篇地址:( 译.持续更新 ) JavaScript 上分小技巧(一) 第二篇地址:( 译.持续更新 ) JavaScr ...
- iOS小技巧总结,绝对有你想要的
原文链接 在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIV ...
随机推荐
- 使用 Django 集成 vue 到一个服务器上,还是 Django 和 vue 分开部署
Django+Vue 的项目,实际部署的时候,使用 Django 集成 vue 到一个服务器上,还是 Django 和 vue 分开部署? 目前在架构选择,基本上定了 Django + Vue 但是实 ...
- 【密码学】为什么不推荐在对称加密中使用CBC工作模式
引言 这篇文章是我在公司内部分享中一部分内容的详细版本,如标题所言,我会通过文字.代码示例.带你完整的搞懂为什么我们不建议你使用cbc加密模式,用了会导致什么安全问题,即使一定要用需要注意哪些方面的内 ...
- Cesium中监听MOUSE_MOVE事件获取经纬度和高度
有时候在这个圆球上获取精确的经度纬度还不容易,特别是高度 还好在cesium提供了接口,看 let selft = this; const scene = this.viewer.scene; var ...
- 《HTML入门笔记2》
HTML常用标签 分别有:a 标签.img 标签.table 标签.form 标签.input 标签等. a 标签(特别常用) a 标签即超级链接,又叫超链接.一个网站通常由多个页面构成,进入网站时首 ...
- kafka消费者那些事儿
前言 消息的消费一般有两种模式,推模式和拉模式.推模式是服务端主动将消息推送给消费者,而拉模式是消费者主动向服务端发起请求来拉取消息.kakfa采用的是拉模式,这样可以很好的控制消费速率.那么kafk ...
- 包含引用类型字段的自定义结构体,能作为map的key吗
1. 引言 在 Go 语言中,map是一种内置的数据类型,它提供了一种高效的方式来存储和检索数据.map是一种无序的键值对集合,其中每个键与一个值相关联.使用 map 数据结构可以快速地根据键找到对应 ...
- [MAUI程序设计] 用Handler实现自定义跨平台控件
@ 目录 Handler 与Xamarin.Forms实现的区别 为什么要用Handler代替Renderer 解耦 生命周期管理 更细粒度的控制 用Effect来实现呢? 自定义手势监听控件 在各平 ...
- 使用 conda 和 Jupyter 创建你的自定义 R 包,转换笔记为幻灯片
创建你的自定义 R 包 出于用户使用方便考虑,Anaconda 已经在 "R Essentials" 中打包了一些最常用的数据科学 R 包.使用 conda metapackage ...
- 【tvm解析】 Operator Strategy 机制
本文地址:https://www.cnblogs.com/wanger-sjtu/p/15082871.html Relay Operator Strategy是建立Relay IR与TOPI算子库的 ...
- Java 设计模式实战系列—工厂模式
在 Java 开发中,对象的创建是一个常见的场景,如果对象的创建和使用都写在一起,代码的耦合度高,也不利于后期的维护.我们可以使用工厂模式来解决这个问题,工厂模式是一个创建型模式,将对象的创建和使用分 ...