如何将Python DataFrame中最右列含NaN的行元素向右平移一列
解决方法
核心思路
不需要遍历整个DataFrame,直接用pandas内置的筛选和位移方法即可实现需求,逻辑如下:
- 筛选出最后一列值为NaN的行
- 对符合条件的行执行按行右移1位操作,移动后左侧空缺位置自动填充NaN
- 将处理后的行替换回原DataFrame即可
完整可运行代码
import pandas as pd import numpy as np # 构造示例数据,和你给出的结构一致 df = pd.DataFrame({ 'one': [1.0, 2.0, 3.0, 4.0], 'two': [1.0, 2.0, 3.0, 4.0], # 中间如果有其他列直接补充即可,最后一列ten的规则和你给出的一致 'ten': [1.0, np.nan, np.nan, 4.0] }, index=['a', 'b', 'c', 'd']) # 核心处理逻辑,仅1行代码即可完成 df[df.iloc[:, -1].isna()] = df[df.iloc[:, -1].isna()].shift(axis=1, fill_value=np.nan) # 输出结果验证 print(df)
代码说明
df.iloc[:, -1]:表示取DataFrame的最后一列,不管总共有多少列都通用df.iloc[:, -1].isna():返回布尔序列,标记最后一列值为NaN的行shift(axis=1):指定按行方向移动数据,默认向右移动,fill_value=np.nan表示移动后左侧空缺的位置填充NaN
运行输出结果
one two ten a 1.0 1.0 1.0 b NaN 2.0 2.0 c NaN 3.0 3.0 d 4.0 4.0 4.0
和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者sanminchui
相关产品推荐
相关产品推荐

