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尽我所能查看“编辑”,这是我想要的。非常感谢。需要一些时间来完全理解代码:顺便说一句,它真的很快。从几分钟到两秒钟。