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

如何按ID和DATE分组且无需聚合函数合并DataFrame多行数据?

解决方案:按ID和DATE整合DataFrame非NA值

问题场景

现有如下结构的DataFrame:

IDDATEVAL 1VAL 2VAL 3VAL 4
ID12018-02-08 01:00:0010NANANA
ID12018-02-08 01:00:00NA30NANA
ID12018-02-08 01:00:00NANA90NA
ID12018-02-08 01:00:00NANANA60

需要按ID和DATE分组,不使用聚合函数,将同组内各列的非NA值整合到同一行,得到如下结果:

IDDATEVAL 1VAL 2VAL 3VAL 4
ID12018-02-08 01:00:0010309060

实现代码

可以通过分组后填充缺失值,再去重的方式实现:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': ['ID1']*4,
    'DATE': ['2018-02-08 01:00:00']*4,
    'VAL 1': [10, None, None, None],
    'VAL 2': [None, 30, None, None],
    'VAL 3': [None, None, 90, None],
    'VAL 4': [None, None, None, 60]
})

# 分组后向前填充缺失值,再保留每组唯一行
result = df.groupby(['ID', 'DATE']).ffill().drop_duplicates(subset=['ID', 'DATE'], keep='first')

print(result)

也可以用向后填充搭配保留最后一行,效果一致:

result = df.groupby(['ID', 'DATE']).bfill().drop_duplicates(subset=['ID', 'DATE'], keep='last')

逻辑说明

  1. groupby(['ID', 'DATE']):确保仅对同一ID和时间戳下的行进行处理
  2. ffill()/bfill():在分组内用非NA值填充缺失值,让同组的有效数据全部集中到一行
  3. drop_duplicates():删除分组后重复的行,只保留整合完成的单行数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:55:14