如何用Pandas为同ApplicationID下的O_Create Offer添加序号重命名
同一Application ID下Offer创建活动添加序号的解决方案
完整代码实现
import pandas as pd # 读取数据,Windows路径用原始字符串避免转义问题 df = pd.read_csv(r"C:\Users\User\Documents\exampleLoan.csv") # 为每个Application ID下的O_Create Offer生成递增序号 df['create_seq'] = df.groupby('Application ID')['Activity'].apply( lambda x: x.eq('O_Create Offer').cumsum() ) # 替换O_Create Offer为带序号的名称 df['Activity'] = df.apply( lambda row: f"{row['Activity']} {row['create_seq']}" if row['Activity'] == 'O_Create Offer' else row['Activity'], axis=1 ) # 删除临时生成的序号列 df.drop('create_seq', axis=1, inplace=True) # 查看结果 print(df)
代码分步解释
- 路径处理:用原始字符串
r""包裹Windows文件路径,避免反斜杠被Python当作转义字符,这是Windows环境读取文件的常用技巧。 - 生成组内序号:
groupby('Application ID')将数据按贷款申请ID分组x.eq('O_Create Offer')标记每组内所有"O_Create Offer"的行,返回布尔值序列cumsum()对布尔序列累加,得到每组内创建活动的递增序号(1、2、3...)
- 替换活动名称:通过
apply遍历每一行,仅对"O_Create Offer"的行拼接序号,其他行保持原活动名称不变。 - 清理临时列:删除用于生成序号的临时列
create_seq,保持数据集整洁。
运行结果
运行后将得到你期望的输出:
Offer ID Activity Application ID 0 Offer_4108 O_Create Offer 1 App_866651 1 Offer_4108 O_Sent App_866651 2 Offer_4108 O_Cancelled App_866651 3 Offer_7743 O_Create Offer 1 App_691650 4 Offer_7743 O_Created App_691650 5 Offer_7743 O_Cancelled App_691650 6 Offer_8595 O_Create Offer 2 App_691650 7 Offer_8595 O_Sent App_691650 8 Offer_8595 O_Cancelled App_691650 9 Offer_8731 O_Create Offer 3 App_691650 10 Offer_8731 O_Sent App_691650 11 Offer_8731 O_Cancelled App_691650 12 Offer_9517 O_Create Offer 1 App_957884 13 Offer_9517 O_Returned App_957884 14 Offer_9517 O_Refused App_957884 15 Offer_9363 O_Create Offer 2 App_957884 16 Offer_9363 O_Returned App_957884 17 Offer_9363 O_Accepted App_957884
内容的提问来源于stack exchange,提问作者Zhuna
相关产品推荐
相关产品推荐

