在自身上加入数据帧以加快迭代速度



我正在做一个数据项目,我正在尝试加快我的初始数据处理速度,因为不可避免地我想对数据做其他事情/新的事情。到目前为止,我一直在尝试进行更多的矢量化并使用 np.where 等。我看到了物质上的收获。

我需要处理的最后一段代码是最慢的。我正在使用 itterrows 循环浏览一个非常大的数据帧(>百万行(。

我本质上要做的是SQL等效的

select curr.value, prev.value from t1 left join t2 on curr.number = prev.number - 1

据我所知,没有办法像这样加入数据帧本身。有没有其他方法可以遍历它以比较当前和以前的值?以下是数据框当前的外观

df = 
[a b c
3 1 0
4 1 0
5 1 0
6 0 1]

请注意,b 从 1 到 0,这就是我试图捕获的内容,我现在将拥有一个如下所示的 df

[a b c b_c
3 1 0  0
4 1 0  0
5 1 0  0
6 0 1  1]

任何帮助都非常感谢,谢谢。

我想你正在寻找这样的东西。基本上你想知道从b到c的切换。

df = pd.DataFrame()
df["a"] = [3,4,5,6,7,8,9]
df["b"] = [1,1,1,0,0,1,1]
df["c"] = [0,0,0,1,1,0,0]
df["b_c"] = df["b"].eq(df["c"].shift()).astype(int)
print(df)

输出:

a  b  c  b_c
0  3  1  0    0
1  4  1  0    0
2  5  1  0    0
3  6  0  1    1
4  7  0  1    0
5  8  1  0    1
6  9  1  0    0

我不确定这是最快的方法,还是比迭代更快,但我认为它是。(至少看起来不错(

最新更新