说,我有一个像这样的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的“触发器”为1。
天真的实现是这样的:
lastdata = df.iloc[0]['data']
wanted = []
for _,row in df.iterrows():
if row['trigger']:
lastdata = row['data']
wanted.append(lastdata)
df['wanted'] = wanted
是否有其他(有效的)方法可以在不遍历数据帧的情况下实现此目的?
好了,你去:
df['wanted'] = pd.Series(df.index*df['trigger']).cummax().apply( lambda i:df.loc[i,'data'])
第一行在第一次触发发生之前使用data [0]。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句