Pyspark:根据其他数据框动态更新数据框的列位置
Pyspark: Dynamically update columns position of a dataframe according to other dataframe
我有经常更改列位置的要求。我没有更改代码,而是创建了一个临时数据框 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
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
这里根据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
此处的列位置根据我在Index_df
中更新的位置进行了更改
我可以 sample_df.select("<column order>")
但我有 70 多列。从技术上讲,这不是最好的交易方式。
您可以使用 select
轻松实现。
首先,您以正确的顺序检索列:
NewColList = Index_df.orderBy("position").select("col").collect()
然后您将新订单应用到您的 df
sample_df = sample_df.select(*[i[0] for i in NewColList])
我有经常更改列位置的要求。我没有更改代码,而是创建了一个临时数据框 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
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
这里根据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
此处的列位置根据我在Index_df
我可以 sample_df.select("<column order>")
但我有 70 多列。从技术上讲,这不是最好的交易方式。
您可以使用 select
轻松实现。
首先,您以正确的顺序检索列:
NewColList = Index_df.orderBy("position").select("col").collect()
然后您将新订单应用到您的 df
sample_df = sample_df.select(*[i[0] for i in NewColList])