首页 > 解决方案 > 如何改变熊猫的周期

问题描述

我有一个数据框,我需要按规则更改 3d 列

1) 如果 i+1 行和第 2 列的 i 行之间的差异 > 1 则第 3d 列 +1

我使用循环编写了一个代码,但这个代码是永恒的。

我用纯python写了一个代码,但是在pandas中必须有更好的方法来做到这一点。那么,如何在 pandas 中重写我的代码以减少时间?

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

代码后:

在此处输入图像描述

标签: pythonpandasjupyter-notebook

解决方案


df['value'] = df.groupby('store_id')['period_id'].transform(lambda x: (x.diff()>1).cumsum()+1)

所以我们按 store_id 分组,检查 period 之间的差异何时大于 1,然后取 bool 的 cumsum。我们添加了 1 以使计数器从 1 而不是 0 开始。

使用上述代码前请确保 period_id 排序正确,否则无法正常工作。


推荐阅读