Python 数据帧向量化 for 循环

标签 python pandas vectorization

我想使用以当前状态为条件的 for 循环对这段 Python 代码进行矢量化,以提高速度和效率。

df_B 的值是根据当前状态 (state) 和相应的 df_A 值计算的。

任何想法将不胜感激。

import pandas as pd
df_A = pd.DataFrame({'a': [0, 1, -1, -1, 1, -1, 0, 0] ,})
df_B = pd.DataFrame( data=0, index=df_A.index, columns=['b'])
print(df_A)

state = 0
for index, iter in df_A.iterrows():
    if df_A.loc[index ,'a'] == -1:
        df_B.loc[index ,'b'] = -10 -state
    elif df_A.loc[index, 'a'] == 1:
        df_B.loc[index, 'b'] = 10 - state
    elif df_A.loc[index, 'a'] == 0:
        df_B.loc[index, 'b'] = 0 - state
    temp_state = state
    state += df_B.loc[index, 'b']
print(df_B)

最佳答案

这似乎有点过分了。您的 state 变量基本上是 df_A['a']*10 中的先前值。所以我们可以使用 shift:

s = df_A['a'].mul(10) 

df_B['b'] = s - s.shift(fill_value=0)

关于Python 数据帧向量化 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64791873/

相关文章:

python - 如何检查字符串中$符号后是否包含数字字符(不包括pandas中的空格)

python - 查找给定区间的最近值

python - 重复构造和销毁上下文会出现错误 #1260

python - 列表的哪些元素进入哪个直方图箱?

Python Pandas 0.14.0。使用 dataframe.to_sql 时时间戳格式错误

c++ - 如何在 AVX2 中将 32 位无符号整数转换为 16 位无符号整数?

python - 如何用 numpy 这个 while + (2x for) 嵌套循环进行矢量化?

python - 多次捕获相同的异常

python - Django:无法运行 django-admin.py

python - 如何跨 Pandas 中的多个数据框列 "select distinct"?