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

如何在DataFrame中通过重复行添加多值行对应的列名?

解决方案

核心思路

先识别每行中DELTA、BETA、GAMMA列里非空值对应的列名,再通过行展开的方式将这些列名映射到新增的NEW列,同时保留原行的所有数据。

代码实现

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({
    'ALPHA': ['#', '#', '#', '#'],
    'DELTA': [1, np.nan, np.nan, 8],
    'BETA': [np.nan, 2, np.nan, 4],
    'GAMMA': [np.nan, 5, 3, 5]
})

# 1. 为每行生成有效列名列表(仅处理DELTA/BETA/GAMMA列)
df['NEW'] = df[['DELTA', 'BETA', 'GAMMA']].apply(lambda x: x.dropna().index.tolist(), axis=1)

# 2. 将列表展开为多行,自动复制原行数据
df = df.explode('NEW').reset_index(drop=True)

# 3. 调整列顺序,把NEW列移到最前面
cols = ['NEW'] + [col for col in df.columns if col != 'NEW']
df = df[cols]

print(df)

输出结果

运行后得到的DataFrame与目标完全一致:

NEW ALPHA DELTA BETA GAMMA
0  DELTA     #     1  NaN   NaN
1   BETA     #   NaN    2     5
2  GAMMA     #   NaN    2     5
3  GAMMA     #   NaN  NaN     3
4  DELTA     #     8    4     5
5   BETA     #     8    4     5
6  GAMMA     #     8    4     5

关键逻辑说明

  • apply(lambda x: x.dropna().index.tolist(), axis=1):遍历每行,筛选出非空值对应的列名并生成列表
  • explode('NEW'):将列表中的每个元素拆分为单独行,自动复制原行的其他字段数据
  • 列顺序调整:确保NEW列位于最左侧,匹配目标格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:02