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

如何在Pandas中保留每行非NaN值并合并为单行?

解决方案

针对你的需求,这里提供几种简洁高效的实现方式:

方法1:提取每列首个非空值

直接对DataFrame的每列进行处理,保留第一个非空值并转换为单行DataFrame:

import numpy as np
import pandas as pd

df = pd.DataFrame({'col1': [1, np.nan, np.nan],
                   'results': ['Sub', 'Sub', 'Sub'],
                   'group': ['a', 'a', 'a'],
                   'seed': [6, 6, 6],
                   'col2': [np.nan, 2, np.nan],
                   'col3': [np.nan, np.nan, 3]})

# 提取每列第一个非空值,转为单行DataFrame
result_df = df.agg(lambda x: x.dropna().iloc[0]).to_frame().T
# 重置索引确保索引为0
result_df = result_df.reset_index(drop=True)

print(result_df)

输出结果:

col1 results group  seed  col2  col3
0   1.0     Sub     a     6   2.0   3.0

方法2:分组聚合(适用于有重复分组字段的场景)

如果数据是按group/seed这类字段分组的,可通过分组操作提取非空值:

# 按分组字段聚合,提取每列首个非空值
result_df = df.groupby(['group', 'seed'], as_index=False).agg(lambda x: x.dropna().iloc[0])

print(result_df)

输出与方法1一致,同时保留分组字段的结构。

方法3:填充NaN后取单行

利用填充函数将同列的非空值填充到NaN位置,再取首行/尾行:

# 向后填充所有NaN,再取第一行
result_df = df.bfill().head(1)
# 也可使用向前填充后取最后一行:df.ffill().tail(1)

print(result_df)

这种方法代码最简洁,适合非空值分散在不同行的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:17:07