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

Pandas:填充空值并去重,但保留含不同值的行

解决DataFrame分组填充并按需合并/保留行的方法

需求分析

给定按user排序的DataFrame,需完成以下处理:

  • 用户a:合并所有行的非空值为一行
  • 用户b:因col2存在两个不同非空值(B、D),保留这两行,并将其他列的非空值(如col1的A、col3的C)填充到这两行中

实现步骤与代码

1. 构造原始数据(模拟输入)

import pandas as pd
import numpy as np

data = {
    'user': ['a', 'a', 'a', 'b', 'b', 'b'],
    'col1': ['X', np.nan, np.nan, 'A', np.nan, np.nan],
    'col2': [np.nan, 'Y', np.nan, np.nan, 'B', 'D'],
    'col3': [np.nan, np.nan, '6', np.nan, 'C', np.nan]
}
df_old = pd.DataFrame(data)

2. 定义分组处理函数

核心逻辑:先在组内双向填充空值,让所有非空值覆盖组内每一行;再根据col2的唯一值去重,保留需要的行

def process_group(group):
    # 组内前向+后向填充空值,确保非空值扩散到所有行
    filled_group = group.ffill().bfill()
    # 按col2去重,保留每个唯一值对应的行
    return filled_group.drop_duplicates(subset='col2', keep='first')

3. 分组处理生成结果

df_new = df_old.groupby('user', group_keys=False).apply(process_group)

最终输出结果

user col1 col2 col3
0    a    X    Y    6
3    b    A    B    C
5    b    A    D    C

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:17:40