我想在条件匹配时添加一行并在所有列中填充值。下面的代码可以正常工作,但是由于数据帧非常庞大,因此需要花费大量时间。可以优化吗?
for i in range(len(df)):
if df['counter'][i]==1:
df.loc[len(df)]=[df['user_id'][i],df['start_time'][i]-datetime.timedelta(seconds=1),'psuedo_App_start',np.nan,0,np.nan,0]
答案 0 :(得分:1)
您可以使用DataFrame.assign
来按dictionary
更改过滤行,然后将concat
更改为原始DataFrame.sort_index
,最后使用DataFrame.reset_index
作为默认唯一索引:< / p>
d = {'event_name':'psuedo_App_start',
'event_desc': np.nan,
'Notification_process':0,
'current_screen':np.nan,
'counter': 0}
df1 = df[df['counter'] == 1].assign(**d).copy()
#if necessary subtract one second
#df1['start_time'] -= datetime.timedelta(seconds=1)
df = pd.concat([df1, df]).sort_index().reset_index(drop=True)