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

在PySpark中实现员工层级结构列的顺序反转

反转员工层级DataFrame的层级列

核心思路

  • 前3列「Name」「Position」「Age」直接保留,不做改动
  • 把所有以「Pos」开头的列(从Pos1到Pos30)单独提取,按行处理:先过滤空值,反转剩余值的顺序,再补空值对齐原列数
  • 最后将处理后的层级列与前3列合并

代码实现

先导入所需库:

import pandas as pd
import numpy as np

编写处理函数:

def reverse_hierarchy(df):
    # 拆分核心列和层级列,确保层级列按Pos1到Pos30排序
    core_cols = ["Name", "Position", "Age"]
    hierarchy_cols = sorted([col for col in df.columns if col.startswith("Pos")], key=lambda x: int(x[3:]))
    
    # 逐行反转层级列的非空值,补空值保持列数一致
    reversed_hierarchy = df[hierarchy_cols].apply(
        lambda row: pd.Series(
            list(reversed(row.dropna())) + [np.nan]*(len(hierarchy_cols)-len(row.dropna()))
        ),
        axis=1
    )
    reversed_hierarchy.columns = hierarchy_cols
    
    # 合并核心列与处理后的层级列
    return pd.concat([df[core_cols], reversed_hierarchy], axis=1)

示例测试

构造样例数据验证效果:

# 生成包含Pos1到Pos30的原始数据
sample_data = {
    "Name": ["Raj", "Alice"],
    "Position": ["Engineer", "Manager"],
    "Age": [28, 35],
    "Pos1": ["Team Lead", "Director"],
    "Pos2": ["Department Head", np.nan],
    "Pos3": ["CEO", np.nan],
    **{f"Pos{i}": np.nan for i in range(4, 31)}
}
original_df = pd.DataFrame(sample_data)

# 执行处理
result_df = reverse_hierarchy(original_df)
print(result_df)

处理后:

  • Raj的层级列变为:Pos1=CEO,Pos2=Department Head,Pos3=Team Lead,Pos4到Pos30均为null
  • Alice的层级列变为:Pos1=Director,其余层级列均为null

注意事项

  • 必须先对层级列按Pos1到Pos30排序,避免原始数据列顺序混乱导致反转结果错误
  • 反转仅针对非空值,补空值保证列数与原数据一致,不破坏DataFrame结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:05:43