Python 循环的矢量化/加速

Python 循环的矢量化/加速,python,pandas,vectorization,Python,Pandas,Vectorization,我有一个熊猫数据框“数据”,并希望执行以下操作: import pandas as pd data = pd.DataFrame({"col": [0,0,0,1,0,0,0,0.1,5,0,0,0], "t": [0,0,0,0,0,0,0,0,0,0,0,0]}) for i in range(1,len(data)): if(data["col"][i]==0): data["t"][i] = data["

我有一个熊猫数据框“数据”,并希望执行以下操作:

import pandas as pd

data = pd.DataFrame({"col": [0,0,0,1,0,0,0,0.1,5,0,0,0],
                    "t": [0,0,0,0,0,0,0,0,0,0,0,0]})

for i in range(1,len(data)):
        if(data["col"][i]==0):
            data["t"][i] = data["t"][i-1]+1
        else:
            data["t"][i] = 0
它的工作原理应该是这样的,但不幸的是它真的很慢。是否有可能加快此代码的速度?例如矢量化

预期产出

df = pd.DataFrame({"col": [0,0,0,1,0,0,0,0.1,5,0,0,0],
                     "t": [0,1,2,0,1,2,3,0,0,1,2,3]})

    col  t
0   0.0  0
1   0.0  1
2   0.0  2
3   1.0  0
4   0.0  1
5   0.0  2
6   0.0  3
7   0.1  0
8   5.0  0
9   0.0  1
10  0.0  2
11  0.0  3
IIUC,你需要一个简单的陈述

np.where(df.col.eq(0), df.t.shift() + 1, 0)

编辑:

由于缺乏示例,很难理解OP想要什么,但是IIUC,以下内容应该有效:

ans2 = df.groupby((df.col.eq(0).shift() != df.col.eq(0)).cumsum()).t.cumcount() + 1

df['ans2'] = np.where(df.col.eq(0), ans2, 0)

好。。我在这里暗中拍摄,但又尝试了一次@Python_Trader尽我所能查看“编辑”,这是我想要的。非常感谢。需要一些时间来完全理解代码:顺便说一句,它真的很快。从几分钟到两秒钟。