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

如何将Pandas DataFrame指定列非空值拆分为新行

Pandas DataFrame结构转换:拆分指定列非空值到新行

问题场景

现有如下DataFrame,需要将col_to_shift列的非空值拆分至新行,同时重复col1、col2的内容,其他列按规则调整:

  • 若col_to_shift非空,生成两行:
    1. 保留col_to_shift的值,col_not_to_shift1和col_not_to_shift2设为NaN
    2. col_to_shift设为NaN,col_not_to_shift1和col_not_to_shift2取原col_not_to_shift1的值
  • 若col_to_shift为空,直接保留原行

原始DataFrame

col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
0   a1   a2           a3                a4                a5
1   b1   b2          NaN                b4               NaN
2   c1   c2           c3                c4                c5

目标DataFrame

col1 col2 col_to_shift col_not_to_shift1 col_not_to_shift2
0   a1   a2           a3               NaN               NaN
1   a1   a2          NaN                a4                a4
2   b1   b2          NaN                b4               NaN
3   c1   c2           c3               NaN               NaN
4   c1   c2          NaN                c4                c4

原始数据生成代码

import numpy as np
import pandas as pd

data = {"col1": ['a1', 'b1', 'c1'], 'col2': ['a2', 'b2', 'c2'],
        'col_to_shift': ['a3', np.NaN, 'c3'],
        'col_not_to_shift1': ['a4', 'b4', 'c4'],
        'col_not_to_shift2': ['a5', np.NaN, 'c5']}
df = pd.DataFrame(data)

解决方案

通过遍历每行生成对应行数据,再拼接成新DataFrame即可实现需求:

rows = []
for _, row in df.iterrows():
    # 生成第一行:保留col_to_shift,非移位列设为NaN
    row1 = row.copy()
    row1['col_not_to_shift1'] = np.nan
    row1['col_not_to_shift2'] = np.nan
    rows.append(row1)
    
    # 仅当col_to_shift非空时,生成第二行
    if pd.notna(row['col_to_shift']):
        row2 = row.copy()
        row2['col_to_shift'] = np.nan
        # 将col_not_to_shift2同步为col_not_to_shift1的值
        row2['col_not_to_shift2'] = row2['col_not_to_shift1']
        rows.append(row2)

# 合并行并重置索引,保持列顺序与原表一致
result_df = pd.concat(rows, axis=1).T.reset_index(drop=True)[df.columns]

执行上述代码后,result_df即为目标结构的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:13:19