如何基于DataFrame分类字段的非末尾标识生成自增Flag字段?
解决方法
可以分两步实现需求:
提取Category的核心部分
先从Category字段中去掉末尾的origin或view,只保留前面的核心字符串。这里用str.rsplit()从右侧按空格分割1次,取分割后的第一个元素:df['core_category'] = df['Category'].str.rsplit(' ', n=1).str[0]生成自增Flag
对比当前行和上一行的core_category是否不同,用ne()(不等于)生成布尔序列,再用cumsum()累加这个序列(不同时加1),最后拼接成Flag_*的格式:df['Flag'] = 'Flag_' + (df['core_category'].ne(df['core_category'].shift())).cumsum().astype(str)可选:清理中间字段
如果不需要保留core_category,可以直接删除:df.drop('core_category', axis=1, inplace=True)
完整代码示例
import pandas as pd df = pd.DataFrame({'Category': {0: 'onboarding segment-confirmation-unexpected-input origin', 1: 'onboarding segment-confirmation-unexpected-input view', 2: 'product-availability cpf-request-unexpected-input origin', 3: 'product-availability postalcode-validation-true-unexpected-input origin', 4: 'product-availability postalcode-validation-true-unexpected-input view'}, 'UserId': {0: 9090, 1: 4545, 2: 3266, 3: 2894, 4: 2772}}) # 提取核心分类 df['core_category'] = df['Category'].str.rsplit(' ', n=1).str[0] # 生成Flag df['Flag'] = 'Flag_' + (df['core_category'].ne(df['core_category'].shift())).cumsum().astype(str) # 删除中间字段 df.drop('core_category', axis=1, inplace=True) print(df)
运行后得到的结果与期望一致:
Category UserId Flag 0 onboarding segment-confirmation-unexpected-in... 9090 Flag_1 1 onboarding segment-confirmation-unexpected-in... 4545 Flag_1 2 product-availability cpf-request-unexpected-i... 3266 Flag_2 3 product-availability postalcode-validation-tr... 2894 Flag_3 4 product-availability postalcode-validation-tr... 2772 Flag_3
内容的提问来源于stack exchange,提问作者INGl0R1AM0R1
相关产品推荐
相关产品推荐

