Python pandas如何仅对指定列实现空值后移非空值左对齐
实现方法
你原有代码的问题是直接对整个DataFrame执行移位逻辑,没有划定处理范围。不需要修改核心的shift_null移位函数,只要拆分列段单独处理目标范围、再拼接保留列即可,具体实现逻辑如下:
- 先把DataFrame拆成两部分:需要执行空值左移的A-E列,以及需要保持原样的F-J列
- 仅对A-E列逐行执行空值左移逻辑,非空值靠左、空值填充到右侧
- 将处理完成的A-E列与未做任何修改的F-J列按列拼接,得到最终结果
完整代码
import numpy as np import pandas as pd # 原有空值移位函数无需修改 def shift_null(arr): return [x for x in arr if x == x] + [np.nan for x in arr if x != x] # 定义处理范围和保留范围 target_columns = ["A", "B", "C", "D", "E"] keep_columns = ["F", "G", "H", "I", "J"] # 仅对目标列执行逐行空值左移 processed_part = df[target_columns].apply(shift_null, axis=1, result_type="expand") processed_part.columns = target_columns # 拼接处理后的列和原封不动的保留列 df = pd.concat([processed_part, df[keep_columns]], axis=1)
代码说明:将apply的
axis参数设为1代表逐行传入数据执行移位,效果和你之前转置后逐列处理完全一致;F-J列全程不参与移位运算,数据和原表完全一致,执行结果和你给出的期望输出完全匹配。
内容的提问来源于stack exchange,提问作者119hj3n3
相关产品推荐
相关产品推荐

