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

Pandas如何实现eee列左侧非空值右移紧贴该列(不改动右侧列)

Pandas DataFrame 左侧列非空值右移对齐实现方案

需求核心规则

  • 仅处理列eee左侧的所有列,eee列及其右侧所有列不得做任何修改
  • 每行eee左侧的非空值需整体右移,最终最右侧非空值紧贴eee列,所有非空值连续无间隙,左侧空位填空字符串
  • 每行右移位的列数 = eee左侧总列数 - 该行左侧非空值的总个数

实现思路

  1. 按eee列的位置将原始DataFrame拆分为两部分:eee左侧列、eee及右侧列,后者直接复制保留不做处理
  2. 逐行遍历左侧列数据,过滤掉每行的空字符串,提取连续的非空值序列
  3. 根据非空值序列长度计算需要前置填充的空字符串数量,拼接为处理后的新行
  4. 将处理完成的左侧列、保留的eee及右侧列按原列顺序拼接,得到最终结果

可直接运行的实现代码

import pandas as pd

def moveOver():
    # 初始化原始测试数据
    df = pd.DataFrame({
        'aaa': ['a', 'a', 'a', 'a', 'a', 'a'],
        'bbb': ['', 'b', 'b', 'b', '', 'b'],
        'ccc': ['', '', 'c', 'c', '', 'c'],
        'ddd': ['', '', '', 'd', '', ''],
        'eee': ['b', 'c', 'd', 'e', 'b', 'd'],
        'fff': ['c', 'd', 'e', 'f', 'c', 'e'],
        'ggg': ['d', 'e', 'f', 'g', 'd', 'f']
    })
    
    # 定位eee列索引,拆分数据
    eee_col_index = df.columns.get_loc('eee')
    left_cols = df.columns[:eee_col_index].tolist()
    keep_part = df.iloc[:, eee_col_index:].copy()
    left_data = df[left_cols].values
    left_col_total = len(left_cols)
    
    processed_left_rows = []
    for row in left_data:
        # 提取当前行所有非空值
        valid_vals = [v for v in row if v != '']
        # 前置补空后拼接有效值
        new_row = [''] * (left_col_total - len(valid_vals)) + valid_vals
        processed_left_rows.append(new_row)
    
    # 拼接为最终DataFrame
    processed_left_df = pd.DataFrame(processed_left_rows, columns=left_cols, index=df.index)
    final_df = pd.concat([processed_left_df, keep_part], axis=1)
    return final_df

# 测试验证
if __name__ == "__main__":
    result = moveOver()
    # 输出结果和预期finalOutput结构完全一致
    print(result.to_dict(orient='list'))

结果验证

运行上述代码后,输出的字典结构与需求中给出的finalOutput完全匹配:

  • 索引0、索引4行:仅存的非空值a右移3位落到ddd列
  • 索引1行:非空序列['a','b']右移2位,分别落到ccc、ddd列
  • 其余行均符合右移对齐规则,eee及右侧列值完全和原始数据一致

如果实际数据中空值为NaN而非空字符串,只需要修改非空值过滤的判断条件即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:18