pandas两个dataframe相减,dataframe 相减
Python是一种优秀的数据分析语言,主要是因为以数据为中心的Python软件包有一个奇妙的生态系统。下面文章主要介绍熊猫自定义移位和DataFrame差集的相关信息,有需要的可以参考一下。
目录
熊猫高级移位偏移Datafream对象差集汇总大家好,我是肖晓明。今天分享两个小技巧:
Pandas的高级shift偏移
很多玩量化的朋友经常会遇到这样的问题:
其中一个量化的老板居然半年后又问我怎么达到这样的效果,他居然忘了我之前给他写过信。为了防止别人再次遇到类似问题,特写此文。
我们知道熊猫的默认API不支持这样的操作,只能自己想办法实现了。我用数值索引来实现这个功能,并封装起来。
我们最终的包装方法如下:
将numpy作为np导入
进口熊猫作为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。系列(na_value))
返回pd。系列(tmp.iloc[t].值,索引=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
ABC 0200120013001100250012003800250046001-200显示结果完全符合要求。
如果要将高级偏移adv_shift方法直接添加到DataFrame对象,可以这样编写:
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。系列(na_value))
返回pd。系列(tmp.iloc[t].值,索引=s.index)
警察。DataFrame.adv_shift=adv_shift
呼叫方法:
df[c]=df.a-df.adv_shift(a , b ,0)
df
ABC 0200120013001100250012003800250046001-200最终结果与上述一致。
Datafream对象求差集
让我们看看如何解决Datafream对象的交集、并集和差集:
进口熊猫作为pd
df1=pd。DataFrame([[1,11],[2,22],[3,33]],
columns=[a , b])
df2=pd。DataFrame([[0,0],[1,11],[2,22],[4,44]],列=[a , b])
显示器(df1)
显示器(df2)
交集和并集的一般实现使用merge方法。
相交:
合并(df2)
工会:
df1.merge(df2,how=outer )
关于差异集,我使用了重复消除法。想法是将df1与df2拼接,然后删除所有重复项,不保留它们。为了删除所有的df2,拼接df2两次,这样所有的df2数据都会被删除,df1所在的与df2一致的数据也会被删除。
代码是:
pd.concat([df1,df2,df2])。drop_duplicates(keep=False)
测试结果:
总结
关于panda自定义移位和DataFrame差异集的这篇文章到此结束。有关Pandasshift和DataFrame差集的更多信息,请搜索热门IT软件开发工作室之前的文章或继续浏览下面的相关文章。希望你以后能支持热门的IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。