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

Pandas按客户id分组并保留非空支付日期的实现方法

你之前的方法失效有两个原因:一是语法顺序错误,正确的分组写法是df.groupby('id')而非groupby.df['id'];二是sum()是数值求和运算,不适用于日期类型的合并,你需要的是取每个id分组下的非空日期值,而非对值求和。


方案1:先转标准日期格式(推荐)

提前把字符串日期转成pandas的日期格式,占位的0会自动转为空日期,后续处理更方便:

import pandas as pd

# 转换日期格式,原数据里的0会自动识别为无效值转为空日期NaT
df['first_payment'] = pd.to_datetime(df['first_payment'], format='%d/%m/%Y', errors='coerce')
df['last_payment'] = pd.to_datetime(df['last_payment'], format='%d/%m/%Y', errors='coerce')

# 按id分组,每组自动取非空的日期值
result = df.groupby('id', as_index=False).max()

方案2:不转日期直接处理

如果不需要保留日期类型,只想保留原字符串格式的日期,可以直接替换0为空值后聚合:

import pandas as pd

# 把两列的占位0替换为空值(如果你的0是数值类型就去掉引号写0即可)
df[['first_payment', 'last_payment']] = df[['first_payment', 'last_payment']].replace('0', pd.NA)

# 按id分组聚合
result = df.groupby('id', as_index=False).agg(
    first_payment=('first_payment', 'max'),
    last_payment=('last_payment', 'max')
)

两种方案得到的结果都和你需要的输出格式一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:15:03