如何改变熊猫的周期

时间:2019-07-23 14:35:33

标签: python pandas jupyter-notebook

我有一个数据框,我需要根据规则更改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]

在代码之前:

https://i.imgur.com/nfmJHbA.png

代码后:

enter image description here

1 个答案:

答案 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的排序正确,否则将无法正常工作。