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

Python 在自身上加入数据帧以加速迭代,python,pandas,iteration,Python,Pandas,Iteration,我正在做一个数据项目,我试图加快我的初始数据处理速度,因为我不可避免地想对数据做一些其他/新的事情。到目前为止,我一直在尝试做更多的矢量化和使用np.where等。我看到了物质上的收获 我需要处理的最后一段代码是最慢的。我使用itterrows在一个非常大的数据帧(>百万行)中循环 我基本上是想做的是SQL等价于 select curr.value, prev.value from t1 left join t2 on curr.number = prev.number - 1 据我所知,没有

我正在做一个数据项目,我试图加快我的初始数据处理速度,因为我不可避免地想对数据做一些其他/新的事情。到目前为止,我一直在尝试做更多的矢量化和使用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再到b的转换

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)
输出:
我不确定这是否是最快的方法,或者它是否比iterrows更快,但我认为是的。(至少看起来不错)

那么
1-df['b']
?对不起,如果我没听懂,你能再解释一下吗?恩达尔,谢谢,这是我一直在寻找的方法。感激
   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