You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas按账号条件将服务日期追加至对应行尾部

解决方法

别用嵌套循环处理,效率低还容易出错,直接用pandas内置函数就能搞定:

  1. 给每个账户的服务日期添加组内序号
    先按Account Number分组,给每个组里的DOS按顺序标记序号(第1个日期标记为1,第2个为2,以此类推):
df['date_idx'] = df.groupby('Account Number').cumcount() + 1
  1. 将数据重塑为宽表结构
    用pivot方法把同一账户的不同日期转到同一行,再把列名改成Service Date 1、Service Date 2的格式:
final_df = df.pivot(index='Account Number', columns='date_idx', values='DOS')
final_df.columns = [f'Service Date {col}' for col in final_df.columns]
final_df = final_df.reset_index().rename(columns={'Account Number': 'Account'})

如果原始数据还有其他关联列(比如姓名、消费金额等),可以把这些列和Account Number一起作为索引,避免丢失信息:

# 假设还有其他列如'Name'
final_df = df.pivot(index=['Account Number', 'Name'], columns='date_idx', values='DOS')
final_df.columns = [f'Service Date {col}' for col in final_df.columns]
final_df = final_df.reset_index()

原代码的问题

  • 未初始化x,且x是全局累加,不是按每个账户单独计数,导致列名序号混乱。
  • final[service_date] = df['DOS']是把整个DOS列赋值给新列,而非当前匹配账户对应的单个日期,所以每个新列都会包含所有日期,不符合需求。

内容的提问来源于stack exchange,提问作者Ceci V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:12:02