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

如何使用Pandas将问卷多列稀疏问题数据合并为单列

Pandas多列稀疏数据按行合并为单列实现方案

场景说明

待处理的问卷数据为多列存储结构,每行仅单个列存在有效值,其余位置为空,需要将所有非空值按原行顺序提取,合并为单列输出。
样例输入数据结构:

Q1Q2Q3Q4
2
1
3
2
4

期望输出为单列Q,值依次为2、1、3、2、4。


实现步骤

首先构造测试数据集,空值统一使用np.nan标识:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Q1': [np.nan, 1, np.nan, np.nan, np.nan],
    'Q2': [2, np.nan, np.nan, 2, np.nan],
    'Q3': [np.nan, np.nan, 3, np.nan, np.nan],
    'Q4': [np.nan, np.nan, np.nan, np.nan, 4]
})

如果你的原始数据空值是空字符串'',先执行一次替换:

df = df.replace('', np.nan)

方法1:按行取首个非空值(性能最优,适配当前单非空场景)

因为每行仅存在1个有效值,沿行方向做向前填充后,最后一列即为每行的非空值,直接提取即可:

result = pd.DataFrame({'Q': df.ffill(axis=1).iloc[:, -1]})

输出结果:

Q
0  2.0
1  1.0
2  3.0
3  2.0
4  4.0

如果需要整数格式,追加.astype(int)转换类型即可。

方法2:stack自动剔除空值(兼容性更强)

stack()方法默认会丢弃所有空值,将DataFrame展平为序列,在当前单非空场景下,展平后的顺序和原行顺序完全一致,不需要额外排序:

result = df.stack().reset_index(drop=True).to_frame(name='Q')

该方法即使后续数据出现单行多非空的情况,也能按列顺序依次展开值,适配性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:03:49