说,我有一个像这样的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
有没有其他(有效的)方法可以在没有迭代数据框的情况下获得这个?
答案 0 :(得分:0)
好的,你走了:
df['wanted'] = pd.Series(df.index*df['trigger']).cummax().apply( lambda i:df.loc[i,'data'])
第一行在第一次触发之前使用数据[0]。