如何基于客户下单次数条件在Pandas中创建布尔值列
实现逻辑
要实现客户第三次下单时标记为True的需求,核心是先统计每个客户到当前行的下单次数序号:
- 用
groupby('customer_id')对每个客户的订单分组 - 用
cumcount()方法生成分组内的行序号,从0开始计数,对应第1/2/3...次下单 - 当序号等于2时,刚好对应客户的第3次下单,标记为True,其余情况标记为False
完整代码
如果你需要用np.where实现,补全后的代码如下:
import pandas as pd import numpy as np # 示例DataFrame df = pd.DataFrame({ 'customer_id': ['5257', '8034', '21474', '21474', '21474', '6157'] }) # 补全后的赋值逻辑 df['recurring_customer'] = np.where(df.groupby('customer_id').cumcount() == 2, True, False)
补充说明
- 运行后得到的
recurring_customer列是布尔类型,如果你需要字符串格式的"True"/"False",可以把代码里的True, False改成"True", "False"即可 - 你给出的期望输出示例存在小的格式笔误(长度不匹配、少引号),上述代码运行后的结果完全符合你的业务需求
- 也可以不用
np.where,直接用更简洁的写法实现同样效果:
df['recurring_customer'] = df.groupby('customer_id').cumcount() == 2
内容的提问来源于stack exchange,提问作者Jordy Slinkman
相关产品推荐
相关产品推荐

