我有一个数据框,我需要根据规则更改3d列
1)如果i + 1行和第二列的i行之间的差异> 1,则3d列+1
我使用循环编写了一个代码,但是该代码可以永久使用。
我用纯python编写了代码,但是在熊猫中必须有更好的方法。 那么,如何用熊猫重写我的代码以减少时间?
old_store_id = -1
for i in range(0,df_sort.shape[0]):
if (old_store_id != df_sort.iloc[i, 0]):
old_store_id = df_sort.iloc[i, 0]
continue
if (df_sort.iloc[i,1]-df_sort.iloc[i-1,1])>1:
df_sort.iloc[i,2] = df_sort.iloc[i-1,2]+1
else:
df_sort.iloc[i,2] = df_sort.iloc[i-1,2]
在代码之前:
代码后:
答案 0 :(得分:0)
df['value'] = df.groupby('store_id')['period_id'].transform(lambda x: (x.diff()>1).cumsum()+1)
因此,我们将store_id分组,检查时间段之间的差值是否大于1,然后取布尔值的总和。我们加了1,使计数器从1开始而不是0。
在使用上面的代码之前,请确保period_id的排序正确,否则将无法正常工作。