最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记。

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行df16行,此时,把df2D列赋值给df1时,
pandas会自动比较df1df2index(索引,也就是上图中红色框内部分),只赋值具有相同index的行。

df1["D"] = df2["D"]
print(df1)

改变df2index,再次赋值看看:

df2 = pd.DataFrame({
"D": [110, 100],
}, index=[4, 7]) df1["D"] = df2["D"]
print(df1)


df2index=4时能和df1匹配,所以赋值之后,只有index=4那行赋给了df1
df2index=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函数不能像shiftpct_change那样可以传入数值或负数参数,只有默认的逐行累积计算。

5. 总结

在分析交易信息,特别是统计收益和收益率的变化时,上面几个函数能帮助我们极大简化代码,避免写各种复杂的循环。

最近常用的几个【行操作】的Pandas函数的更多相关文章

  1. linux常用的一些命令行操作(ubuntu)

    软件安装 sudo apt-get install xxx 压缩和解压缩 1. *.tar 用 tar –xvf 解压 2. *.gz 用 gzip -d或者gunzip 解压 3. *.tar.gz ...

  2. Kafka命令行操作及常用API

    一.Kafka命令行操作 1.查看当前集群已存在的主题 bin/kafka-topic.sh --zookeeper hd09-01:2181 --list 2.创建主题 bin/kafka-topi ...

  3. git 常用命令行操作

    git常用命令行操作: 点击 git bash 进入到命令行: git clone https://github.com/wlz1244/qingoo.git   //下载一个master分支代码 g ...

  4. ZooKeeper常用命令行操作

    ZooKeeper常用命令行操作 通过./zkCli.sh 打开zk的客户端进入命令行后台 ls/ls2 列出当前节点下的子节点 ls2还会列出当前节点的状态 [zk: localhost:2181( ...

  5. 常用 Git 命令行操作

    本文记录了一些常用 Git 命令行操作的具体使用方式 git clone git clone REPOSITORY_URL 拉取仓库,并使用仓库名作为本地文件名 git clone REPOSITOR ...

  6. HDFS分布式文件系统的常用命令行操作

    一.HDFS的客户端种类 1.网页形式  =>用于测试 网址为你的namenode节点的ip+50070的端口号,如: 192.168.50.128:50070 2.命令行形式 =>用于测 ...

  7. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  8. Git基本命令行操作 (转)

    Git远程操作详解   作者: 阮一峰 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和 ...

  9. linux快速入门 1.1命令行操作

    http://lovesoo.org/linux-command-line-operation.html 1.1命令行操作 目录: <wp_nokeywordlink>Shell简介 &l ...

  10. svn---命令行操作

    一.基本操作 1.checkout是将服务器上的代码下载到本地(下载所有文件).Checkout只需要做一次 2.commit是将本地修改之后的文件提交到服务器(只提交修改之后的).每天下班前:com ...

随机推荐

  1. Ubuntu系统部署springcloud+nacos遇到的问题。

    1,部署上的jar包运行正常,但是通过浏览器不能访问,telnet +IP+端口连接不通.小皮面板访问后台接口也是不通但是小皮面板可以通过浏览器访问.具体问题暂未解决. 2,改用docker部署,将j ...

  2. Hadoop_05 使用xsync脚本命令分发,手动配置脚本

    在/usr/local/bin 目录下创建 xsync 文件,向里面添加 1 #!/bin/sh 2 # 获取输入参数个数,如果没有参数,直接退出 3 pcount=$# 4 if((pcount== ...

  3. 16 JavaScript逗号运算符

    16 JavaScript逗号运算符 Python 逗号运算符一般用于组合多个表达式,其返回值是最后一个表达式的值,例如: function s(){ console.log(1), console. ...

  4. #Tarjan,贪心#LOJ 3684 「COCI 2022.3」Usmjeravanje

    题目传送门 分析 可以发现题目实际上求的是最小强连通分量个数. 并且每个强连通分量必然是由最多两段区间 \(a_l\sim a_r,b_L\sim b_R\) 组成的 只要存在一条路 \(b_R-&g ...

  5. 陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

      11月4日,以"技术筑生态,智联赢未来"为主题的第二届OpenHarmony技术大会在北京隆重举办.本次大会由OpenAtom OpenHarmony(简称"Open ...

  6. Git 07 IDEA基本使用

    IDEA 是目前最流行的 Java 集成开发环境,我们一般使用 Git 都是在 IDEA 上操作. 这里以 2021.3.2 版 IDEA 为例. 克隆项目 1.复制 Gitee 上的项目地址 2.点 ...

  7. 当JDBC遇上返回Cursor

    当 JDBC 遇上返回 Cursor 本文出处:https://www.modb.pro/db/400426 使用 jdbc 访问 PostgreSQL 或者 MogDB(openGauss)数据库里 ...

  8. 新一期HarmonyOS认证正式发布,速来围观!

    原文:https://mp.weixin.qq.com/s/mvXLnJM9VKTyq8mi9BfY1w,点击链接查看更多技术内容.   华为认证HarmonyOS应用开发高级工程师HCIP-Harm ...

  9. 抓包整理————ip 协议二[十三]

    前言 介绍一下什么是nat协议和napt协议,和简单带一下LVS. 正文 什么是nat(Network Address Translation) 协议呢? 比如现在你家分配了一个ip,但是你家有10个 ...

  10. sql 语句系列(用魔法打败魔法)[八百章之第十章]

    前言 下面是一些常规的运维手段. 查询每个表的行数 SELECT a.name, a.object_id, b.rows, b.index_id FROM sys.tables AS a INNER ...