数据挖掘与分析训练中的疑问

目的:将用户群体打标为活跃、回流、未注册等

问题:
这样做可以打标成功:

img


图 数据集1

img


图 打标成功

而源于我在之前合并月份时的一个小错误(将两年的同一月合并在了一列里),导致我之前是用另一份数据集跑这个代码,但是会报错 keyError:0 (我修改了循环次数 range(12)

img


图 数据集2

img

img

疑问:请教各位为什么第二份dataframe会运行不出来呢?疑问了一上午= =

附上代码:

# 判断新老用户、回流用户、活跃用户
def active_status(data):
    status = [] # 存储18个月的状态:unreg/new/active/unactive/return
    for i in range(18):
        # 本月没有消费
        if data[i] == 0:
            if len(status) == 0: #971月份未消费:未注册 
                status.append('unreg')
            else: # 判断上月状态
                if status[i-1] == 'unreg':#一直未消费过
                    status.append('unreg')
                else:  # 无论上月是什么 本月未消费则不活跃
                    status.append('unactive')
        # 本月有消费
        else:
            if len(status) == 0:
                status.append('new')
            else:
                if status[i-1] == 'unactive':
                    status.append('return')
                elif status[i-1] == 'unreg':
                    status.append('new')
                else: #new/active/return
                    status.append('avtive')
    return pd.Series(status, df_purchase.columns) # 每次返回一整行

purchase_states = df_purchase.apply(active_status,axis=1)
purchase_states