脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Pandas自定义shift与DataFrame求差集的小技巧

Pandas自定义shift与DataFrame求差集的小技巧

2022-10-17 10:39小小明-代码实体 Python

Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统,下面这篇文章主要给大家介绍了关于Pandas自定义shift与DataFrame求差集的相关资料,需要的朋友可以参考下

大家好,我是小小明。今天分享两个小技巧:

Pandas的高级shift偏移

有很多玩量化的朋友经常碰到类似这样的问题:

Pandas自定义shift与DataFrame求差集的小技巧

其中有位量化大佬居然在半年后的今天又问了我一遍怎么实现这样的效果,他居然忘了我之前给他写过实现。为了避免有人再碰到类似的问题,特别写下此文。

我们知道Pandas默认的API是不支持这样的操作的,这个只能自己想办法实现。下面我借助数值索引实现这样的功能,并封装起来。

最终我们封装的方法如下:

import numpy as np
import pandas as pd

def adv_shift(s, n, na_value=pd.NA):
    t = np.arange(s.shape[0])-n
    t[t < 0] = s.shape[0]
    tmp = s.append(pd.Series(na_value))
    return pd.Series(tmp.iloc[t].values, index=s.index)

然后生成测试数据完成这个需求:

df = pd.DataFrame({"a": [200, 300, 500, 800, 600], "b": [1, 1, 1, 2, 1]})
df["c"] = df.a-adv_shift(df.a, df.b, 0)
df
  a b c
0 200 1 200
1 300 1 100
2 500 1 200
3 800 2 500
4 600 1 -200

可以看到结果完全满足要求。

如果你希望直接给DataFrame对象增加高级偏移adv_shift方法,则可以这样写:

def adv_shift(self, field, n, na_value=pd.NA):
    t = np.arange(self.shape[0])-self[n]
    s = self[field]
    t[t < 0] = s.shape[0]
    tmp = s.append(pd.Series(na_value))
    return pd.Series(tmp.iloc[t].values, index=s.index)

pd.DataFrame.adv_shift = adv_shift

调用方式:

df["c"] = df.a-df.adv_shift("a", "b", 0)
df
  a b c
0 200 1 200
1 300 1 100
2 500 1 200
3 800 2 500
4 600 1 -200

最终结果与上述一致。

 

Datafream对象求差集

下面我们再看看如何求解Datafream对象的交集、并集和差集:

import pandas as pd

df1 = pd.DataFrame([[1, 11], [2, 22], [3, 33]],
                   columns=["a", "b"])
df2 = pd.DataFrame([[0, 0], [1, 11], [2, 22], [4, 44]], columns=["a", "b"])
display(df1)
display(df2)

Pandas自定义shift与DataFrame求差集的小技巧

交集和并集一般的实现都是使用merge方法。

取交集:

df1.merge(df2)

去并集:

df1.merge(df2, how="outer")

关于取差集,我采用的是去重法。思路是,将df1与df2拼接,然后将重复的都去掉不保留,为了将df2全部去掉,将df2拼接两次,这样所有df2的数据都会产生重新而被删除,df1存在于与df2一致的数据也会被删除。

代码为:

pd.concat([df1, df2, df2]).drop_duplicates(keep=False)

测试结果:

Pandas自定义shift与DataFrame求差集的小技巧

 

总结 

到此这篇关于Pandas自定义shift与DataFrame求差集的文章就介绍到这了,更多相关Pandas shift与DataFrame求差集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/as604049322/article/details/118887322

延伸 · 阅读

精彩推荐
  • Pythonpython自定义函数实现一个数的三次方计算方法

    python自定义函数实现一个数的三次方计算方法

    今天小编就为大家分享一篇python自定义函数实现一个数的三次方计算方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    张楚岚6582021-05-19
  • PythonPython使用一行代码获取上个月是几月

    Python使用一行代码获取上个月是几月

    本文介绍的关于Python时间日期处理,日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,本文主要给大家介绍Python使用一...

    脚本之家9432021-03-30
  • Python通过python顺序修改文件名字的方法

    通过python顺序修改文件名字的方法

    今天小编就为大家分享一篇通过python顺序修改文件名字的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    longma6666665052021-03-16
  • Pythonpython下解压缩zip文件并删除文件的实例

    python下解压缩zip文件并删除文件的实例

    下面小编就为大家分享一篇python下解压缩zip文件并删除文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    MoonBreeze_Ma6102021-02-05
  • Pythonpytest进阶教程之fixture函数详解

    pytest进阶教程之fixture函数详解

    这篇文章主要给大家介绍了关于pytest进阶教程之fixture函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    江枫对愁眠4562021-09-29
  • Python用Python写一个属于自己的天气查询软件

    用Python写一个属于自己的天气查询软件

    本软件用PySide2来构建的GUI界面,PySide2是一个无需授权就可以商用的完全兼容QT5的框架,我网上找视频自学了下入门,联系以前自学python时编写的查询天气...

    幽灵黑one7242021-08-05
  • Pythonpython实现雨滴下落到地面效果

    python实现雨滴下落到地面效果

    这篇文章主要为大家详细介绍了python实现雨滴下落到地面效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    凌空的桨7102021-03-07
  • Python浅谈Python数据类型之间的转换

    浅谈Python数据类型之间的转换

    下面小编就为大家带来一篇浅谈Python数据类型之间的转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    脚本之家6332020-08-26