使用Pandas计算大型数据框中第n个和n-1个值之间的差异的Python方式?

2024-04-24 22:13:32 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个100x100的数据帧,完全由数值组成。你知道吗

我要做的是得到第n行和第n-1行每列的差值:

假设第一列有值(1,2,3,4…..100),我想要的是输出(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]

我相信这会给我正确的结果,但是,我想知道是否有可能更优雅的解决方案


Tags: 数据indffor过程rangelist机会
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

就像@ALollz说的.diff()在这里可以很好很快地工作。 第一排将得到南,所以我重新分配第一排。你知道吗

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]

原始数据帧

enter image description here

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

enter image description here

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

enter image description here

相关问题 更多 >