Pyspak:根据其他数据帧动态更新数据帧的列位置

LUZ*_*UZO 0 python apache-spark pyspark pyspark-sql

我需要经常更改列位置.而不是更改代码我创建了一个临时数据帧Index_df.在这里,我将更新列位置,它应该反映更改应该执行的实际数据帧.

sample_df

F_cDc,F_NHY,F_XUI,F_NMY,P_cDc,P_NHY,P_XUI,P_NMY
415    258   854   245   478   278   874   235
405    197   234   456   567   188   108   267
315    458   054   375   898   978   677   134
Run Code Online (Sandbox Code Playgroud)

Index_df

   col   position
    F_cDc,1 
    F_NHY,3
    F_XUI,5
    F_NMY,7
    P_cDc,2 
    P_NHY,4
    P_XUI,6
    P_NMY,8
Run Code Online (Sandbox Code Playgroud)

在这里index_df,sample_df应该改变.

预期产量:

F_cDc,P_cDc,F_NHY,P_NHY,F_XUI,P_XUI,F_NMY,P_NMY
415    478   258   278   854   874   245   235
405    567   197   188   234   108   456   267
315    898   458   978   054   677   375   134
Run Code Online (Sandbox Code Playgroud)

这里的列位置根据我更新的位置而改变 Index_df

我能做到,sample_df.select("<column order>")但我有超过70列.从技术上讲,这不是最好的交易方式.

Ste*_*ven 6

您可以轻松实现这一目标select.

首先,按正确的顺序检索列:

NewColList = Index_df.orderBy("position").select("col").collect()
Run Code Online (Sandbox Code Playgroud)

然后你将新订单应用到你的df

sample_df = sample_df.select(*[i[0] for i in NewColList])
Run Code Online (Sandbox Code Playgroud)