使用pandas应用函数访问两个轴

时间:2017-08-01 02:50:47

标签: 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:
        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

在这里,我必须使用&#39; ABCD&#39;中的值。如果值> 66,flag应该设置为1并且&lt; 33,标志应为0。 对于其他值,它应该重复以前的flag值。

请告诉我如何优化此功能?

1 个答案:

答案 0 :(得分:0)

您可以使用np.where来向量化if/else;当值> = 66时将标志设置为1,当值<= 33时设置为0,否则设置为NaN然后对结果flag列进行前向填充:

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