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

Pandas如何将DataFrame的姓名行数据关联到下方对应行生成Name列

Pandas DataFrame行关联提取及报错解决方案

运行报错原因

你使用的代码存在3个核心问题:

  1. 变量未初始化:循环从i=1开始遍历,而第一个姓名行(Alfred)在索引i=0的位置,代码没有提前处理这一行给running_name赋初始值,第一次遇到非姓名行时running_name还没被定义,直接触发NameError。
  2. NaN判断逻辑错误:is np.nan无法正确判断空值,因为NaN的特性是不等于任何值包括自身,空值判断需要用pd.isna()或者np.isnan()方法。
  3. 缺少DataFrame初始化:代码没有提前定义new_df的结构,后续给new_df.loc[j]赋值时也会抛出未定义的错误。

需求实现代码

推荐用pandas内置的向量化方法实现,比循环逻辑更高效简洁:

import pandas as pd
import numpy as np

# 构造原始数据
df = pd.DataFrame({"1": ['Alfred', 'car', 'bike','Alex','car'],
                   "2": [np.nan, 'Ford', 'Giant',np.nan,'Toyota'],
                   "3": [pd.NaT, pd.Timestamp("2018-01-01"),
                            pd.Timestamp("2018-07-01"),np.nan,pd.Timestamp("2021-01-01")]})

# 新增姓名列:提取姓名行的值向前填充到所有关联行
df['Name'] = df['1'].where(df['2'].isna()).ffill()

# 过滤掉原始姓名行,重命名列得到最终结果
result = df[~df['2'].isna()].rename(columns={
    '1': 'transportation',
    '2': 'Mark',
    '3': 'BuyDate'
}).reset_index(drop=True)[['transportation', 'Mark', 'BuyDate', 'Name']]

print(result)

运行输出和你期望的结果完全一致:

transportation    Mark    BuyDate Name
0            car    Ford 2018-01-01  Alfred
1           bike   Giant 2018-07-01  Alfred
2            car  Toyota 2021-01-01    Alex

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:02