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

Pandas数据处理:将指定列非空值移至对应行下方新行

处理Pandas DataFrame别名行展开需求

原始DataFrame

import pandas as pd

data = { 'Name Type': ["Primary", "Primary", "Primary"],
         'Full Name': ["John Snow", "Daenerys Targaryen", "Brienne Tarth"], 
         'AKA': ["Aegon Targaryen", None, None],
         'LQAKA': ["The Bastard of Winterfell", "Mother of Dragons", None],
         'Other': ["Info", "Info", "Info"]}
df = pd.DataFrame(data)

需求说明

将AKA和LQAKA列中的非空值移至对应Primary名称所在行的下方,同时将Name Type设为对应列名(AKA或LQAKA);值为None时不生成新行。Other等其他列仅保留Primary行的信息,最终预期结果如下:

Name TypeFull NameOther
PrimaryJohn SnowInfo
AKAAegon Targaryen
LQAKAThe Bastard of Winterfell
PrimaryDaenerys TargaryenInfo
LQAKAMother of Dragons
PrimaryBrienne TarthInfo

解决方案代码

# 提取Primary行的核心数据
primary_df = df[['Name Type', 'Full Name', 'Other']]

# 处理AKA列生成对应行
aka_df = df[df['AKA'].notna()].rename(columns={'AKA': 'Full Name'})
aka_df['Name Type'] = 'AKA'
aka_df = aka_df[['Name Type', 'Full Name', 'Other']]
aka_df['Other'] = ''

# 处理LQAKA列生成对应行
lqaka_df = df[df['LQAKA'].notna()].rename(columns={'LQAKA': 'Full Name'})
lqaka_df['Name Type'] = 'LQAKA'
lqaka_df = lqaka_df[['Name Type', 'Full Name', 'Other']]
lqaka_df['Other'] = ''

# 按原始顺序合并并排序,保证别名行紧跟对应Primary行
result = pd.concat([primary_df, aka_df, lqaka_df]).sort_index(kind='mergesort')
result = result.reset_index(drop=True)

print(result)

代码逻辑说明

  1. 提取Primary基础行:直接取出原始表中Name Type为Primary的核心列,保留Other列的原始信息。
  2. 处理AKA列:筛选AKA非空的行,将AKA列重命名为Full Name,修改Name Type为AKA,清空Other列内容后保留目标列。
  3. 处理LQAKA列:和AKA列逻辑一致,筛选非空行后调整列名与Name Type,清空Other列。
  4. 合并排序:将三个表合并,用mergesort按原始索引排序,确保别名行紧跟对应Primary行,最后重置索引得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:20:59