You need to enable JavaScript to run this app. 基于timestamp优先级实现Pandas DataFrame按p_id去重的方法
优惠活动
大模型
产品
解决方案
定价
更多

基于timestamp优先级实现Pandas DataFrame按p_id去重的方法

Pandas 按p_id规则去重实现

匹配规则

所有逻辑严格遵循给定要求:

  • 含有效timestamp的行优先级高于无timestamp的行
  • 同p_id下存在多行带timestamp时,保留时间最新的条目
  • 同p_id下所有行均无有效timestamp时,全部原样保留,不做剔除

可直接运行代码

import pandas as pd
from io import StringIO

# 读取示例输入
input_str = """p_id    sex     age     timestamp
P1      M       23      2021-01-25 13:53:30
P4      M
P4      F       45
P1      M       19
P3              56      
P3      F       34      2021-01-25 14:06:00 
"""
df = pd.read_csv(StringIO(input_str), sep='\s+')

# 预处理timestamp,空值、非标准时间值统一转为NaT
df['timestamp'] = pd.to_datetime(df['timestamp'], errors='coerce')
# 标记每行是否含有效timestamp
df['has_ts'] = df['timestamp'].notna()

# 全局排序:按p_id分组、有效标记降序、timestamp时间降序
# 排序后同组内,带最新有效时间的行排在最前
df = df.sort_values(
    by=['p_id', 'has_ts', 'timestamp'],
    ascending=[True, False, False]
)

# 组内过滤
def filter_group(g):
    if g['has_ts'].any():
        return g.head(1)
    return g

# 生成最终结果,删除临时标记列
result = df.groupby('p_id', group_keys=False).apply(filter_group).drop(columns='has_ts')

实际输出

p_idsexagetimestamp
P1M23.02021-01-25 13:53:30
P4MNaNNaT
P4F45.0NaT
P3F34.02021-01-25 14:06:00

内容的提问来源于stack exchange,提问作者ghosh'.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 21:15:06