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

Pandas自合并处理缺失结构:合并重复分组的缺失列

解决Pandas DataFrame自合并补全缺失值的问题

嘿,这个场景我熟!咱们可以通过自合并+分组提取完整信息的方式来补全这个DataFrame的缺失结构,具体操作看下面:

1. 先还原你的原始数据

首先先把你给出的DataFrame代码和输出放出来,方便对照:

原始代码

from numpy import nan
import pandas as pd

data = {'A': {0: 1, 1: 2, 2: 1, 3: 2}, 
        'B': {0: 0.1, 1: 0.5, 2: 0.1, 3: 0.5}, 
        'C1': {0: 9.0, 1: 9.0, 2: nan, 3: nan}, 
        'C2': {0: 9.0, 1: 9.0, 2: nan, 3: nan}, 
        'D1': {0: nan, 1: nan, 2: 6.0, 3: 6.0}, 
        'D2': {0: nan, 1: nan, 2: 6.0, 3: 6.0}}
df = pd.DataFrame(data)

原始输出

A    B   C1   C2   D1   D2
0  1  0.1  9.0  9.0  NaN  NaN
1  2  0.5  9.0  9.0  NaN  NaN
2  1  0.1  NaN  NaN  6.0  6.0
3  2  0.5  NaN  NaN  6.0  6.0

2. 自合并补全缺失值的方法

观察数据能发现:同一(A,B)组合的行,缺失的是互补的列——比如(1,0.1)的两行,一行有C列值、一行有D列值;(2,0.5)同理。所以我们可以先提取每个(A,B)组合的完整非缺失数据,再和原数据合并。

具体步骤代码

# 第一步:按A、B分组,提取每组的完整非缺失数据(因为同组非缺失值重复,用first()/max()都可以)
grouped_full = df.groupby(['A', 'B']).first().reset_index()

# 第二步:用原数据的A、B列和完整数据做内合并,补全所有缺失列
result_df = df[['A', 'B']].merge(grouped_full, on=['A', 'B'], how='inner')

合并后的输出

A    B   C1   C2   D1   D2
0  1  0.1  9.0  9.0  6.0  6.0
1  2  0.5  9.0  9.0  6.0  6.0
2  1  0.1  9.0  9.0  6.0  6.0
3  2  0.5  9.0  9.0  6.0  6.0

3. 补充:更简洁的填充方式(逻辑类似)

如果不想显式做合并,也可以用groupby.transform直接在原数据上填充,本质是一样的分组取完整值的逻辑:

# 对所有列按A、B分组填充缺失值
filled_df = df.groupby(['A', 'B']).transform('first')
# 把A、B列还原回去(因为transform会覆盖,不过其实原数据A、B没有缺失,也可以直接用df[['A','B']])
filled_df[['A', 'B']] = df[['A', 'B']]

这样得到的结果和合并方式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:29