def active_status(data):
status = []
for i in range(18):
#若本月没有消费
if data[i] == 0:
if len(status) > 0:
if status[i-1] == 'unreg':
status.append('unreg')
else:
status.append('unactive')
else:
status.append('unreg')
#若本月消费
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:
status.append('active')
return status
purchase_stats = df_purchase.apply(active_status,axis=1)
purchase_stats
#返回结果
user_id
1 [new, unactive, unactive, unactive, unactive, ...
2 [new, unactive, unactive, unactive, unactive, ...
3 [new, unactive, return, active, unactive, unac...
4 [new, unactive, unactive, unactive, unactive, ...
5 [new, active, unactive, return, active, active...
...
23566 [unreg, unreg, new, unactive, unactive, unacti...
23567 [unreg, unreg, new, unactive, unactive, unacti...
23568 [unreg, unreg, new, active, unactive, unactive...
23569 [unreg, unreg, new, unactive, unactive, unacti...
23570 [unreg, unreg, new, unactive, unactive, unacti...
Length: 23570, dtype: object
df_purchase还是一个dataframe表格如下图(我的目的就是把下图的数字替换成一个个如"new"\"unreg"等的英文):
对series再处理一下,构造成数据框。这样写,题主看看是不是能得到需要的结果。
purchase_stats = pd.DataFrame(df_purchase.apply(active_status, axis=1).tolist(), index=df_purchase.index, columns=df_purchase.columns)
print(purchase_stats)
month 1997-01-01 ... 1997-04-01
userid ...
23566 unreg ... unactive
23577 unreg ... unactive
23588 unreg ... active
23589 new ... active
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y