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

Pandas如何将DataFrame每行最后一个非NaN值移动至最后一列Year

错位DataFrame年份列规整方案

首先可构造测试数据复现描述的错位场景:

import pandas as pd
import numpy as np

# 复现问题的测试样例
df = pd.DataFrame({
    'Name': ['Adam', 'Betty', 'Calvin', 'Debra'],
    'Gender': ['Male', 1968, 'Male', 'Female'],
    'Country': ['USA', np.nan, 1995, 2000],
    'Year': [1992, np.nan, np.nan, np.nan]
})

核心处理代码,完全匹配给定的三条规则:

# 逐行提取非空值序列
valid_series = df.apply(lambda x: x.dropna().tolist(), axis=1)

# 按规则:每行最后一个非空值为年份,直接赋值给Year列
df['Year'] = valid_series.apply(lambda x: x[-1])

# 非空序列去掉首项(Name)、尾项(Year)后,剩余值按顺序填充Gender、Country,无值则填NaN
df['Gender'] = valid_series.apply(lambda x: x[1] if len(x) >= 3 else np.nan)
df['Country'] = valid_series.apply(lambda x: x[2] if len(x) >= 4 else np.nan)

处理后执行print(df)可得到规整结果:

Name  Gender Country  Year
0    Adam    Male     USA  1992
1   Betty     NaN     NaN  1968
2  Calvin    Male     NaN  1995
3   Debra  Female     NaN  2000

逻辑说明:

  • 依托规则「每行必然存在Name、Year有效值,且Name为第一个非空值、Year为最后一个非空值」,直接从非空序列首尾取固定字段,不会出现错取
  • 中间字段按原列顺序依次填充,错位到Gender/Country列的年份会被自动排除,原位置置空,无残留错位值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:19:51