为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 计算大型数据帧中第 n 个和第 n-1 个值之间的差异的

使用 Pandas 计算大型数据帧中第 n 个和第 n-1 个值之间的差异的

一只甜甜圈 2021-11-09 13:40:41
假设我有一个 100x100 的 Pandas 数据框,完全由数值组成。我想要做的是获取第 n 行和第 n-1 行的每一列的差异:假设第一列有值 (1,2,3,4.....100) 我想要的是输出 (1,1,1,1,1,1,1.....1)它将从第二行中减去第一行,从第三行中减去第二行等等......对于每一列。我已经使用 for 循环完成了它,它循环遍历每一列,然后每行。但我想知道是否有更优雅的解决方案这就是我认为可行的方法,实际上由于某些原因还没有机会尝试....outputframe = pd.DataFrame(data=0, index = list(range(1,99)), column = list(range(1,100))For i in range(0,100):    For x in range(1,100):       outputframe.iloc[x,i]= df.iloc[x,i]-df[x-1,i]我相信这会给我正确的结果,但是,我想知道是否有更优雅的解决方案
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

这里的关键是 pandasshift(n)方法,它允许您按n行移动索引。


import pandas as pd

import numpy as np


df = pd.DataFrame(np.random.randint(0,100,size=(100, 100)))

df_new = df.shift(-1) - df


查看完整回答
反对 回复 2021-11-09
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

就像@ALollz 所说的那样.diff()在这里工作得很好而且很快。第一行将得到 NaN,所以我再次重新分配第一行。


import pandas as pd

import numpy as np


df = pd.DataFrame(np.random.randint(0,100,size=(100, 100)))

df_new = df.diff()

df_new.iloc[0] = df.iloc[0]

原始数据框

//img1.sycdn.imooc.com//618a0a06000142a702640301.jpg

.diff() 之后(第一行为 NaN)

//img1.sycdn.imooc.com//618a0a110001f21803950301.jpg

后 df_new.iloc[0] = df.iloc[0]


//img1.sycdn.imooc.com//618a0a1e00016c3c04000304.jpg

查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信