合并DataFrame中同一instance的多列数据,解决groupby操作异常
解决方案:合并同一Instance的分散列数据
你看到的<pandas.core.groupby.generic.DataFrameGroupBy object>不是错误,只是groupby()方法返回的是分组对象,而非直接处理后的DataFrame。你需要在分组后添加聚合操作,提取每个instance分组下的非NaN值,合并为单行。
核心思路
同一instance分组内,scan/comp/sort等列各自仅存在一个有效非NaN值,其余均为NaN。因此只需对每个分组的列取第一个非空值(或任意非空值)即可完成合并。
具体代码实现
- 先构造一个模拟你的
df1的示例:
import pandas as pd import numpy as np df1 = pd.DataFrame({ 'instance': ['inst1', 'inst1', 'inst1', 'inst2', 'inst2'], 'scan': [100, np.nan, np.nan, np.nan, 200], 'comp': [np.nan, 50, np.nan, 80, np.nan], 'sort': [np.nan, np.nan, 30, np.nan, 40] })
- 使用
groupby+聚合操作完成合并:
# 方式1:用first()自动跳过NaN,返回分组内每个列的第一个非空值 df2 = df1.groupby('instance').first().reset_index() # 方式2:自定义lambda函数提取非空值,逻辑更直观 df2 = df1.groupby('instance').agg(lambda x: x.dropna().iloc[0]).reset_index()
说明
first()方法完美适配你的场景:它会自动忽略NaN,返回分组内每个列的第一个有效非空值。reset_index()用于将instance从分组索引重新转为普通列,让最终的df2保持每行对应一个instance的规整结构。
内容的提问来源于stack exchange,提问作者user3555115
相关产品推荐
相关产品推荐

