如何在Pandas中将每行唯一值填充至最右侧列
解决方案:提取每行唯一有效值到指定列
假设你的DataFrame每行仅包含一个非NaN有效值,列数不确定,想要将每行的有效值统一放到最右侧列(或生成仅保留最右侧列名的结果),可以用以下几种简洁方法实现:
方法一:利用bfill按行填充
bfill(axis=1)会按行从右往左填充NaN值,最后取最右侧一列即可:
import pandas as pd import io temp = """ col1,col2,col3 nan,nan,3 nan,4,nan 1,nan,nan """ data = pd.read_csv(io.StringIO(temp), sep=",") # 提取每行有效值到最右侧列 data2 = data.bfill(axis=1).iloc[:, [-1]] print(data2)
输出结果:
col3 0 3.0 1 4.0 2 1.0
方法二:利用stack堆叠非空值
stack()会自动过滤NaN值,之后重置索引提取对应值,再转为DataFrame并指定列名:
data2 = pd.DataFrame(data.stack().reset_index(level=1, drop=True), columns=[data.columns[-1]]) print(data2)
这个方法适合需要处理更复杂索引的场景,同样能得到目标结果。
方法说明
- 方法一的
bfill(axis=1):按行方向从右到左填充,把每行的有效值覆盖到右侧列,最后取最后一列即可,执行效率较高。 - 方法二的
stack():将列索引转为行索引的层级,只保留非NaN值,之后通过重置索引去掉多余层级,重新组织成目标列名的DataFrame。
内容的提问来源于stack exchange,提问作者user3685918
相关产品推荐
相关产品推荐

