最近常用的几个【行操作】的Pandas函数
最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记。
1. shfit函数
shift函数在策略回测代码中经常出现,计算交易信号,持仓信号以及资金曲线时都有涉及。
这个函数的主要作用是将某列的值上下移动。
默认情况下,shift函数是向下移动一行,
移动后,新数据列的第一行数据用NaN(空值)填充,原始数据列的最后一行丢弃。
import pandas as pd
df = pd.DataFrame({
"A": [1, 2, 3, 4, 5, 6],
"B": [2, 3, 4, 2, 4, 5],
"C": [5, 6, 7, 1, 3, 4],
}, dtype=float)
# 默认 shift()
df["C-shift()"] = df["C"].shift()
print(df)
也可以在shift函数中指定移动的行数,比如下面的代码下移3行。
df["C-shift(3)"] = df["C"].shift(3)
print(df)
指定的行数为负值时,表示向上移动,此时,下面的部分用NaN填充。
df["C-shift(-3)"] = df["C"].shift(-3)
print(df)
shift之后一般会在 首部/尾部 产生NaN空值,根据情况看是否需要进一步处理。
2. 不同行数的列赋值
shift函数还是比较好理解的,
下面这个操作比shift稍微复杂一些。
为了简化,创建两个测试数据:
df1 = pd.DataFrame({
"A": [1, 2, 3, 4, 5, 6],
"B": [2, 3, 4, 2, 4, 5],
"C": [5, 6, 7, 1, 3, 4],
})
df2 = pd.DataFrame({
"D": [110, 100],
})
print(df1, df2)
把df2只有2行,df1有6行,此时,把df2的D列赋值给df1时,pandas会自动比较df1和df2的index(索引,也就是上图中红色框内部分),只赋值具有相同index的行。
df1["D"] = df2["D"]
print(df1)
改变df2的index,再次赋值看看:
df2 = pd.DataFrame({
"D": [110, 100],
}, index=[4, 7])
df1["D"] = df2["D"]
print(df1)
df2中index=4时能和df1匹配,所以赋值之后,只有index=4那行赋给了df1,df2中index=7那行没匹配上,就直接丢弃了。
所以,不同行数的两个数据集互相赋值时,比不是从上而下按行赋值,而是根据两个数据的index来匹配赋值的。
这时,再回头看计算交易信号的代码,temp虽然经过过滤之后,行数比df要少,但是过滤之后的每行数据会根据对应的index准确的赋给df中相同index的行。
3. pct_change函数
pct_change函数用来计算数据百分比变化的。
具体的计算规则是,当前行数据 减去 上一行数据,得出的结果再 除以 上一行数据。
比如:
df = pd.DataFrame({
"A": [1, 2, 3, 4, 5, 6],
"B": [2, 3, 4, 2, 4, 5],
"C": [5, 6, 7, 1, 3, 4],
}, dtype=float)
df["C_percent"] = df["C"].pct_change()
第一行数据因为没有上一行数据,所以是 NaN,
这和shift函数一样,处理完之后,别忘了填充第一行的NaN。
同样,pct_change()可以传入参数跨越多行。
df["C_percent"] = df["C"].pct_change(3)
向上3行,也就是隔两行计算变化百分比,这里就会产生3个NaN。
pct_change()还可以传入负值,传入负值时的计算规则变为:
当前行数据 减去 下一行数据,得出的结果再 除以 下一行数据。
比如:
df["C_percent"] = df["C"].pct_change(-1)
这样,空值NaN出现最后一行,因为最后一行没有下一行。
4. cumprod函数
cumprod函数用来计算累积乘积的。
具体的计算规则是,若 当前行 是第一行,则直接用 **当前行数据 **作为 累积乘积结果;
若 当前行 不是第一行,则用 **当前行数据 **乘以 上一行累积乘积结果,得出的结果作为 当前行累积乘积结果。
比如:
df["C_cumprod"] = df["C"].cumprod()
cumprod函数不能像shift和pct_change那样可以传入数值或负数参数,只有默认的逐行累积计算。
5. 总结
在分析交易信息,特别是统计收益和收益率的变化时,上面几个函数能帮助我们极大简化代码,避免写各种复杂的循环。
最近常用的几个【行操作】的Pandas函数的更多相关文章
- linux常用的一些命令行操作(ubuntu)
软件安装 sudo apt-get install xxx 压缩和解压缩 1. *.tar 用 tar –xvf 解压 2. *.gz 用 gzip -d或者gunzip 解压 3. *.tar.gz ...
- Kafka命令行操作及常用API
一.Kafka命令行操作 1.查看当前集群已存在的主题 bin/kafka-topic.sh --zookeeper hd09-01:2181 --list 2.创建主题 bin/kafka-topi ...
- git 常用命令行操作
git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git //下载一个master分支代码 g ...
- ZooKeeper常用命令行操作
ZooKeeper常用命令行操作 通过./zkCli.sh 打开zk的客户端进入命令行后台 ls/ls2 列出当前节点下的子节点 ls2还会列出当前节点的状态 [zk: localhost:2181( ...
- 常用 Git 命令行操作
本文记录了一些常用 Git 命令行操作的具体使用方式 git clone git clone REPOSITORY_URL 拉取仓库,并使用仓库名作为本地文件名 git clone REPOSITOR ...
- HDFS分布式文件系统的常用命令行操作
一.HDFS的客户端种类 1.网页形式 =>用于测试 网址为你的namenode节点的ip+50070的端口号,如: 192.168.50.128:50070 2.命令行形式 =>用于测 ...
- DOS命令行操作MySQL常用命令
平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...
- Git基本命令行操作 (转)
Git远程操作详解 作者: 阮一峰 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和 ...
- linux快速入门 1.1命令行操作
http://lovesoo.org/linux-command-line-operation.html 1.1命令行操作 目录: <wp_nokeywordlink>Shell简介 &l ...
- svn---命令行操作
一.基本操作 1.checkout是将服务器上的代码下载到本地(下载所有文件).Checkout只需要做一次 2.commit是将本地修改之后的文件提交到服务器(只提交修改之后的).每天下班前:com ...
随机推荐
- 聊聊大模型"打字机"效果的背后技术——SSE
SSE:Server Sent Event:服务器发送事件. Server-Sent Events(SSE)是一种由服务器向客户端推送实时数据的技术.它是构建基于事件的.服务器到客户端的通信的一种方法 ...
- KingbaseES V8R3 运维案例 -- sys_dump备份故障“SYS_MAC_POLICY_ENFORCEMENT”
案例说明: 在KingbaseES V8R3执行sys_dump时出现"ERROR: permission denied for relation SYS_MAC_POLICY_ENFO ...
- python爬虫爬取科技报告数据,共计40余万条(来自国家科技报告服务系统)
按学科分类[中图分类] 共计三十余万条科技报告数据 爬取的网址:https://www.nstrs.cn/kjbg/navigation !!! 如果要完整地跑起来代码,需要先看一下我的这篇博客,完成 ...
- 面试题,关于int类型转byte类型结果溢出
1 package com.atguigu.chapter03 2 /* 3 byte:-128~127 4 128 : Int类型,占4个字节,32位 5 计算机中的整型数据都以补码的形式存储,正数 ...
- 【Learning eBPF-2】eBPF 的“Hello world”
前一章讲了 eBPF 为什么这么吊,不理解没关系,现在开始,我们通过一个 "Hello world" 例子,来真正入门一下. BCC Python 框架是上手 eBPF 的最友好方 ...
- #floyd,斜率#洛谷 1354 房间最短路问题
题目 在一个长宽均为10,入口出口分别为(0,5),(10,5)的房间里有几堵墙, 每堵墙上有两个缺口,求入口到出口的最短路径. 分析 暴力建图,判断两个点是否有墙堵住, 可以求斜率然后判断所交点不能 ...
- OpenHarmony装饰指定自定义组件:@BuilderParam装饰器
当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作.若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能.为解决此问题,ArkUI ...
- 56.5K star的gpt4free开源项目到底真的假的?
前言 这个项目是我很早之前就star,只是当时觉得有点天真,怎么会有那么多免费的好事情呢?然后就在清明节前夕,OpenAI 开放了免登录即可使用GPT-3.5的模型,那么势必很快就有了免费使用GPT- ...
- 【布局进阶】巧用 :has & drop-shadow 实现复杂布局效果
最近,群里聊到了一个很有意思的布局效果.大致效果如下所示,希望使用 CSS 实现如下所示的布局效果: 正常而言,我们的 HTML 结构大致是如下所示: <div class="g-co ...
- React中的setState执行机制
一.是什么 一个组件的显示形态可以由数据状态和外部参数所决定,而数据状态就是state 当需要修改里面的值的状态需要通过调用setState来改变,从而达到更新组件内部数据的作用 如下例子: impo ...