从第三列为1的另一列中的最后一个值创建一个pandas df列

时间:2015-06-17 11:42:51

标签: pandas

说,我有一个像这样的DataFrame:

import pandas as pd
import numpy as np
df =  pd.DataFrame({'data' : np.arange(10), 'trigger' : np.random.randint(0,2, size=10)})

我想获得第三列,其中第i列包含“数据”列的值,其中最大索引小于i,其中“trigger”为1。

一个天真的实现就是:

lastdata = df.iloc[0]['data']
wanted = []
for _,row in df.iterrows():
    if row['trigger']:
        lastdata = row['data']
    wanted.append(lastdata)
df['wanted'] = wanted

有没有其他(有效的)方法可以在没有迭代数据框的情况下获得这个?

1 个答案:

答案 0 :(得分:0)

好的,你走了:

df['wanted'] = pd.Series(df.index*df['trigger']).cummax().apply( lambda i:df.loc[i,'data'])

第一行在第一次触发之前使用数据[0]。