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

问题描述 投票:1回答:2

假设我有一个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]

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

python python-3.x pandas
2个回答
2
投票

这里的关键是pandas shift(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

0
投票

就像@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]

原始数据帧

enter image description here

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

enter image description here

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.