Python 使用“应用”功能访问两个轴

Python 使用“应用”功能访问两个轴,python,pandas,Python,Pandas,我必须使用apply访问当前行中的值和以前计算的值。下面是代码片段。如何优化此代码以更快地工作 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(30, 1)), columns=['ABCD']) for idx in range(0, len(df)): df.ix[idx, 'flag'] = 0 if 0 == idx: cont

我必须使用apply访问当前行中的值和以前计算的值。下面是代码片段。如何优化此代码以更快地工作

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(30, 1)), columns=['ABCD'])

for idx in range(0, len(df)):
    df.ix[idx, 'flag'] = 0
    if 0 == idx:
        continue
    if df.ix[idx, 'ABCD'] >= 66:
        df.ix[idx, 'flag'] = 1
    elif df.ix[idx, 'ABCD'] <= 33:
        df.ix[idx, 'flag'] = 0
    else:
        df.ix[idx, 'flag'] = df.ix[idx-1, 'flag']

print df
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame(np.random.randint(0100,size=(30,1)),列=['ABCD']
对于范围(0,len(df))内的idx:
df.ix[idx,'标志']=0
如果0==idx:
持续
如果df.ix[idx,'ABCD']>=66:
df.ix[idx,'标志']=1
elif df.ix[idx,'ABCD']66,标志应设置为1,<33,标志应为0。
对于其他值,它应重复标志的上一个值


请让我知道如何优化此功能

您可以使用
np.where
if/else
进行矢量化;当值>=66时,将标志设置为1,当值=66时,将标志设置为0,将标志设置为1,
非常感谢。这项工作做得很好,运行速度也很快。
df['flag0'] = pd.np.where(df.ABCD >= 66, 1,
              pd.np.where(df.ABCD <= 33, 0, pd.np.nan))
​
df['flag0'] = df['flag0'].ffill()

(df.flag == df.flag0).all()
# True