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
相关产品推荐
相关产品推荐

