python - 矢量化/加速 for 循环

标签 python pandas vectorization

我有一个 pandas DataFrame“数据”并且想要执行以下操作:

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声明

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 - 矢量化/加速 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55089434/

相关文章:

python pandas dataframe 将字符串值的末尾替换为另一个字符

java - OpenJDK Panama Vector API jdk.incubator.vector未提供Vector点产品的改进结果

python - 如何按名称获取列的索引?

python - 使用 xlsxwriter merge_row 错误

python - 随机日期和月份,但保留年份和时间间隔

python - 在 pandas apply 方法中,根据条件复制行

compiler-construction - ARM NEON 矢量化失败

python - 向量化欧氏距离计算 - NumPy

python - 使用 pip 安装包返回错误

python - Django/Apache/mod_wsgi 不使用 virtualenv 的 Python 二进制文件