pandas:对字符串类型做差分比较
时间:2022-07-24
本文章向大家介绍pandas:对字符串类型做差分比较,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 问题需求
某种行为最常发生时段、最少发生时段与X天前是否一致
需求变形:判断上下行数据是否一致
2. 预备知识
2.1 Series.ne(Series)
判断两个Series是否相等
import pandas as pd
import numpy as np
a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
a
a 1.0
b 1.0
c 1.0
d NaN
b
a 1.0
b NaN
d 1.0
e NaN
a.ne(b)
a False
b True
c False
d True
a.ne(b).astype(int)
a 0
b 1
c 0
d 1
2.2 DataFrame.shift()
按行或列移动,默认向下按行移动。
2.3 DataFrame.bfill()
用下一个非缺失值填充该缺失值。
等价 DataFrame.fillna(method='bfill'),也等价于 ’!= ‘,但 ’!=‘耗时较慢,所以不推荐使用。
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],index =['a','b','c','d'])
df
AA BB CC DD
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
df.shift()
AA BB CC DD
a NaN NaN NaN NaN
b 0.0 1.0 2.0 3.0
c 4.0 5.0 6.0 7.0
d 8.0 9.0 10.0 11.0
df.shift().bfill()
AA BB CC DD
a 0.0 1.0 2.0 3.0
b 0.0 1.0 2.0 3.0
c 4.0 5.0 6.0 7.0
d 8.0 9.0 10.0 11.0
3. 解决方法
由于 diff()只能对非字符串类型(numerical、datetimes)进行差分比较,所以对于类别型变量的比较,可以采用下面方法:
df['changed'] = df['column'].ne(df['coluimn'].shift().bfill()).astype(int)
4. 例子
ColumnA ColumnB
1 Blue
2 Blue
3 Red
4 Red
5 Yellow
df['changed'] = df['ColumnB'].ne(df['ColumnB'].shift().bfill()).astype(int)
ColumnA ColumnB changed
1 Blue 0
2 Blue 0
3 Red 1
4 Red 0
5 Yellow 1
5. 补充内容
对以下操作的耗时进行比较:
%timeit df['ColumnB'].ne(df['ColumnB'].shift().bfill()).astype(int)
10 loops, best of 3: 38.1 ms per loop
%timeit (df.ColumnB != df.ColumnB.shift()).astype(int)
10 loops, best of 3: 77.7 ms per loop
%timeit df['ColumnB'] == df['ColumnB'].shift(1).fillna(df['ColumnB'])
10 loops, best of 3: 99.6 ms per loop
%timeit (df.ColumnB.ne(df.ColumnB.shift())).astype(int)
10 loops, best of 3: 19.3 ms per loop
- 一组扁平化组件推荐下载(PSD 格式)
- [C#6] 6-表达式形式的成员函数
- 在启用了IPV6的机器上获取客户端ipv4地址
- 使用 MDT 2010 进行可伸缩部署
- 性能优化工具 MVC Mini Profiler
- 在ASP.NET应用启动的时候初始化的几种方法
- [C#6] 8-异常增强
- 信息超新星的诞生
- jquery mobile 移动web(2)
- [腾讯社区开放平台].NET SDK基于New BSD协议开源
- IIS7.5上的REST服务的Put操作发生HTTP Error 405.0 - Method Not Allowed 解决方法
- 使用 asp.net mvc和 jQuery UI 控件包
- jquery mobile 移动web(1)
- WordPress Plugin Boilerplate:一个WordPress 插件开发模板(框架)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 利用scikitlearn画ROC曲线实例
- 小程序微信退款功能实现方法详解【基于thinkPHP】
- PHP回调函数简单用法示例
- PHP explode()函数用法讲解
- 详解提高使用Java反射的效率方法
- PHP fopen函数用法实例讲解
- python正则表达式的懒惰匹配和贪婪匹配说明
- PyQt5-QDateEdit的简单使用操作
- thinkphp5实现无限级分类
- Python numpy矩阵处理运算工具用法汇总
- Django后端分离 使用element-ui文件上传方式
- PHP fprintf()函数用法讲解
- django template实现定义临时变量,自定义赋值、自增实例
- PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
- PHP写API输出的时用echo的原因详解