【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 ...
随机推荐
- 2022-07-12:以下go语言代码输出什么?A:1 1;B:1.0 1.0;C:编译不通过;D:1.0 1。 package main import “fmt“ func main() {
2022-07-12:以下go语言代码输出什么?A:1 1:B:1.0 1.0:C:编译不通过:D:1.0 1. package main import "fmt" func ma ...
- 2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。要
2021-09-21:给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置.如果数组中不存在目标值 target,返回 [-1, -1].要 ...
- 利用简单的IO操作实现M3U8文件之间的合并
先上代码: 1 @SneakyThrows //合并操作,最终文件不包含结束标识,方便多次合并 2 private static void mergeM3U8File(String source, S ...
- lec-5-Policy Gradients
直接策略微分 Goal: idea:求最大值:直接求导 tip:利用log导数等式进行变换 具体推导: 理解策略梯度 假定开始policy服从高斯分布,采样得到回报,计算梯度,根据reward增加动作 ...
- MD5加密后为0e开头的字符串
QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s ...
- 牧云 • 主机管理助手|正式开放应用市场,梦幻联动雷池WAF等多款开源软件
0x00 前言 上个月,我司长亭开源了雷池WAF,不到三天就吸引了超过上千个师傅使用,几个交流群里,师傅们讨论的热火朝天,其中两个话题引起了我们牧云 • 主机管理助手 ( Collie ) 团队的关注 ...
- 【C#/.NET】使用ASP.NET Core对象池
Nuget Microsoft.Extensions.ObjectPool 使用对象池的好处 减少初始化/资源分配,提高性能.这一条与线程池同理,有些对象的初始化或资源分配耗时长,复用这些对象减少初始 ...
- BFF层聚合查询服务异步改造及治理实践 | 京东云技术团队
首先感谢王晓老师的[接口优化的常见方案实战总结]一文总结,恰巧最近在对稳健理财BFF层聚合查询服务优化治理,针对文章内的串行改并行章节进行展开,分享下实践经验,主要涉及原同步改异步的过程.全异步化后衍 ...
- wait_timeout and interactive_timeout 参数
wait_timeout and interactive_timeout 参数 非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过 ...
- 4. SpringMVC获取请求参数
1. 通过 ServletAPI 获取 将 HttpServletRequest 作为控制器方法的形参 , 此时 HttpServletRequest 类型的参数表示封装了当前请求的请求报文的对象 ...